I'm having a problem using RequestFuture volleyball class . In fact, it just stops at wait(0)
; inside the doGet()
function in the RequestFuture class below and never wakes up onResponse
or onErrorResponse
, as it seems to me.
private synchronized T doGet(Long timeoutMs) throws InterruptedException, ExecutionException, TimeoutException { if (mException != null) { throw new ExecutionException(mException); } if (mResultReceived) { return mResult; } if (timeoutMs == null) { wait(0); } else if (timeoutMs > 0) { wait(timeoutMs); } if (mException != null) { throw new ExecutionException(mException); } if (!mResultReceived) { throw new TimeoutException(); } return mResult; } @Override public boolean isCancelled() { if (mRequest == null) { return false; } return mRequest.isCanceled(); } @Override public synchronized boolean isDone() { return mResultReceived || mException != null || isCancelled(); } @Override public synchronized void onResponse(T response) { mResultReceived = true; mResult = response; notifyAll(); } @Override public synchronized void onErrorResponse(VolleyError error) { mException = error; notifyAll(); }
This is how I try to call it all up.
RequestFuture<JSONObject> future = RequestFuture.newFuture(); JsonObjectRequest myReq = new JsonObjectRequest(Request.Method.POST, url, jsonObj, future, future); requestQueue.add(myReq); try { JSONObject response = future.get(); } catch (InterruptedException e) {
I also tried replacing the string
requestQueue.add(myReq);
from
future.setRequest(requestQueue.add(myReq));
or
future.setRequest(myReq);
which also did not help.
I already tried the regular Volley Request, which worked perfectly with these parameters, so this should not be the reason. I think the problem is that the request is never executed, so response listeners are never reached. Also tried requestQueue.start()
, but didn't change anything.
Hope I explained my problem well enough, Thanks in advance!
source share