Android - Volley RequestFuture Délai D'Attente

Je suis confronté à un problème lors de l'utilisation de la RequestFuture classe de volley.
En fait il s'arrête juste à wait(0); à l'intérieur de la doGet() Fonction dans le RequestFuture catégorie ci-dessous et n'est jamais réveillé par onResponse ou onErrorResponse que je pense qu'il devrait.

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();
}

C'est la façon dont j'essaie d'appeler tout cela ci-dessus.

    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) {
        //handle the error
    } catch (ExecutionException e) {
        //handle the error
    }

J'ai aussi essayé de remplacer la ligne

requestQueue.add(myReq);

avec

future.setRequest(requestQueue.add(myReq));

ou

future.setRequest(myReq);

qui n'a pas aidé non plus.

J'ai déjà essayé une habitude de Volley Demande qui a très bien fonctionné à l'aide de ces paramètres, de sorte que ne devrait pas en être la cause.
Je suppose que le problème, c'est que la demande n'est jamais réellement exécuté, et c'est pourquoi la réponse des auditeurs ne sont jamais atteints. Aussi essayé requestQueue.start(), mais n'a pas changer une chose.

J'espère que j'ai expliqué mon problème assez bien,
Merci à l'avance!

  • Pourquoi essayez-vous d'utiliser RequestFuture? Pouvez-vous partager vos cas d'utilisation?
  • Bien problème j'ai été confronté, c'est que j'ai trois demandes et le dernier de ces trois s'appuie sur la réponse des deux premières demandes. J'ai déjà essayé à l'aide de différents RequestQueues, mais il est toujours construit de toutes les demandes avant de les commencer en fait. Donc, je n'ai jamais eu de stocker les valeurs des deux premiers afin que je puisse les utiliser dans la dernière demande. Ma solution pour le moment est en utilisant des écouteurs d'événement à réagir sur les réponses de chaque demande et de commencer une nouvelle une fois que la précédente est terminée.
  • Mais vous avez déjà 2 écouteurs pour votre Volley demandes: le succès de l'écouteur et l'erreur de l'auditeur. Vous pouvez aller vous chercher résultat(s) dans la réussite à l'écoute (et peut-être mettre quelque valeur personnalisée dans votre erreur auditeurs - selon vos besoins) et il suffit de lancer votre demande subséquente à partir de là, la réussite et/ou d'erreur d'auditeurs. De cette façon, vos demandes sont synchrones et vous n'avez pas à déranger la mise en œuvre de RequestFuture.
  • ok, je vais les utiliser. J'ai juste pensé à l'aide de RequestFuture serait le mieux/plus propre approche, mais il ne fonctionne pas correctement, comme il semble. Merci beaucoup!
  • Je souhaite que quelqu'un avait été en mesure de répondre à cette question. Je vais avoir le même problème. Soupir.
  • Voir @Blundell, en réponse à une question similaire.

InformationsquelleAutor user2700475 | 2013-09-09