Le délai d'attente pour la demande du serveur effectué en utilisant "Volley" uniquement sur Android, pas iOS

Dans une de mes applications, j'envoie la demande au serveur en utilisant la volley fournie par Google .

Problème: L'expiration et l'objet d'erreur sont nuls sur onErrorResponse(VolleyError error)

  • Comment obtenir l'adresse e-mail de l'utilisateur enregistré avec la demande de graphique dans Facebook Android sdk 4.0
  • Android Facebook SDK: vérifiez si l'utilisateur est connecté ou non
  • Android WebView manipule de manière incorrecte les nouvelles lignes dans un texte préformaté
  • Facebook SDK pour Android duplicate support library sur les dépendances
  • Avertissement: la demande sans session nécessite un jeton mais manque soit de l'identifiant de l'application, soit du jeton du client
  • Volley - Paramètres POST / GET
  • Ce que j'ai essayé jusqu'à présent:

    1) J'ai d'abord eu un objet d'erreur null, ce qui l'a résolu en utilisant le code ci-dessous:

      @Override protected void deliverResponse(String response) { super.deliverResponse(response); } @Override public void deliverError(VolleyError error) { super.deliverError(error); DebugLog.e("deliverResponse", "getNetworkTimeMs : " + error.getNetworkTimeMs()); } 

    Jusqu'à présent, j'ai compris qu'il y a un timeout lorsque j'ai eu l'objet d'erreur null .

    2) Maintenant Application est pour Android et iOS et web mais le timeout ne se produit que pour Android .

    Journal de volley pour les demandes:

     BasicNetwork.logSlowRequests: HTTP response for request 

    Note éditée:

    1. Les services Web développés à la fin du serveur sont identiques pour les trois instances (Android, Web et iOS).

    2. Timeout se produit lorsque trop d'utilisateurs effectuent des requêtes sur le serveur.

    3. J'ai réglé le délai de temps jusqu'à 2 minutes, bien que la volley lance un délai dans 30 secondes seulement parfois .

    4. J'ai beaucoup de réponses pour changer de serveur, mais comme cela n'est pas possible, donc toute autre solution, s'il vous plaît.

    J'aimerais également ajouter que si je peux obtenir plus d'informations sur le moment où le délai d'attente peut être possible en volley?

    Références que j'ai parcourues:

    Optimisation de la volée

    Httpclient-souvent-hors-usage-wifi-est-va-fine-avec-3g

    Long_xmlhttprequest_ajax_requests_timeout_on_android

    Edité:

    J'ai également configuré la politique de tentative ci-dessous:

     request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

    Et je ne souhaite pas non plus réessayer si le délai d'attente de connexion.

    Comment puis-je faire un appel de service efficace qui peut résoudre un problème de timeout d' timeout .

    Toute aide sera évaluée.

    Merci.

    3 Solutions collect form web for “Le délai d'attente pour la demande du serveur effectué en utilisant "Volley" uniquement sur Android, pas iOS”

    Comme j'ai essayé d'obtenir une solution de ce problème pendant environ deux mois, je n'ai pas eu de solution parfaite. Bien que j'analyse certains faits comme ci-dessous:

    1. Vous pouvez améliorer les performances de votre serveur
    2. J'ai essayé de faire une demande de service Web en utilisant HttpURLConnection mais HttpURLConnection toujours le même problème là-bas.

    Je pense donc que ce problème n'est pas spécifique à la volée, mais vous obtenez ce problème, puis je suggérerais augmenter les performances du serveur avec la personnalisation ci-dessous RetryPolicy :

     int x=2;// retry count request.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS * 48, x, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

    J'espère que cela aidera.

    Les suggestions sont toujours les bienvenues 🙂

    Veuillez commenter ci-dessous si vous avez trouvé une solution plus appropriée.

    Merci.!

    IMHO, vous pouvez vous référer à ce qui suit:

    À l'intérieur de BasicNetwork.java , vous trouverez des informations telles que:

     ... private static int SLOW_REQUEST_THRESHOLD_MS = 3000; ... /** * Logs requests that took over SLOW_REQUEST_THRESHOLD_MS to complete. */ private void logSlowRequests(long requestLifetime, Request<?> request, byte[] responseContents, StatusLine statusLine) { if (DEBUG || requestLifetime > SLOW_REQUEST_THRESHOLD_MS) { VolleyLog.d("HTTP response for request=<%s> [lifetime=%d], [size=%s], " + "[rc=%d], [retryCount=%s]", request, requestLifetime, responseContents != null ? responseContents.length : "null", statusLine.getStatusCode(), request.getRetryPolicy().getCurrentRetryCount()); } } ... // if the request is slow, log it. long requestLifetime = SystemClock.elapsedRealtime() - requestStart; logSlowRequests(requestLifetime, request, responseContents, statusLine); ... 

    Donc, si votre projet utilise la volée de Google en tant que module (pas le fichier JAR), vous pouvez mettre à jour BasicNetwork.java , en augmentant la valeur SLOW_REQUEST_THRESHOLD_MS , peut-être 10000 (ms) ou plus, par exemple.

    Une autre option, selon la réponse @ neuron à la question suivante:

    Comment optimiser la file d'attente du réseau dans la Volley Android? (Volley Google IO 2013)

    Je pense que vous pouvez essayer d'augmenter la valeur de NETWORK_THREAD_POOL_SIZE en utilisant le constructeur suivant dans votre application:

     public RequestQueue(Cache cache, Network network, int threadPoolSize) { this(cache, network, threadPoolSize, new ExecutorDelivery(new Handler(Looper.getMainLooper()))); } 

    P / S: si vous voulez uniquement les lignes BasicNetwork.logSlowRequests: HTTP response for request ne s'affiche plus sans augmenter NETWORK_THREAD_POOL_SIZE , il suffit de commenter ( // ) la ligne logSlowRequests... ci-dessus (lorsque votre application utilise la volée de Google en tant que module – pas le fichier jar, pas compile mcxiaoke... dans le fichier build.gradle )

    J'espère que cela aide!

     public class JGet extends Request { private final Response.Listener listener; public JGet(final String url, List params, Response.Listener responseListener) { super(Request.Method.GET, NetUtils.getUrlWithParams(url, params), new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError volleyError) { NetUtils.dealVolleyError(volleyError, url); } }); this.listener = responseListener; this.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 0, 1.0f)); LogUtils.e("request-start--->"); LogUtils.e(url); LogUtils.e(params); LogUtils.e("request-start--->"); } } 

    Définir l'heure d'expiration.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.