我想使用volley库进行同步请求,我使用了以下代码:
RequestFuture<Long> future = RequestFuture.newFuture(); AuthenticatedJsonRequest request = new AuthenticatedJsonRequest(Method.GET,ServiceUrl,null,future,future); requestQueue.add(request); try { Long response = future.get();
但代码在这里永远阻止:
Long response = future.get();
这是我的自定义JsonRequest
public class AuthenticatedJsonRequest extends JsonRequest<Long> { public AuthenticatedJsonRequest(int method,String url,String requestBody,Listener<Long> listener,ErrorListener errorListener) { super(method,url,requestBody,listener,errorListener); // TODO Auto-generated constructor stub } @Override public Map<String,String> getHeaders() throws AuthFailureError { Map<String,String> headers = new HashMap<String,String>(); String creds = String.format("%s:%s",RestClient.UserName,RestClient.Password); String auth = "Basic " + Base64.encodeToString(creds.getBytes(),Base64.DEFAULT); headers.put("Authorization",auth); return headers; } @Override protected Response<Long> parseNetworkResponse(NetworkResponse response) { try { String jsonString = new String(response.data,HttpHeaderParser.parseCharset(response.headers)); return Response.success(Long.valueOf(jsonString),HttpHeaderParser.parseCacheHeaders(response)); } catch (UnsupportedEncodingException e) { return Response.error(new ParseError(e)); } }
我调试了凌空代码,它在NetworkDispatcher中停止
//从队列中获取请求.
request = mQueue.take();