Lorsque je reçois une erreur dans onerrorrepsonse de android volley demande que je souhaite réessayer la demande. Comment puis-je atteindre cet objectif?Réessayer demande onErrorResponse Android volley
Répondre
bien, vous pouvez créer le RetryPolicy
pour modifier le comportement de nouvelle tentative par défaut, ne spécifiez timeout milliseconds
, retry count
arguments:
public class YourRequest extends StringRequest {
public YourRequest(String url, Response.Listener<String> listener,
Response.ErrorListener errorListener) {
super(url, listener, errorListener);
setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS,
DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
}
}
l'autre façon est d'estimer la VolleyError, ré-exécuter à nouveau la même demande quand si était TimeoutError
par exemple:
public static void executeRequest() {
RequestQueue.add(new YourRequest("http://your.url.com/", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error instanceof TimeoutError) {
// note : may cause recursive invoke if always timeout.
executeRequest();
}
}
}));
}
vous pouvez avoir une question à ce moment: « ont Volley offrir des méthodes de rappel de nouvelle tentative? », la réponse est « none ». mais il y a un appel de projet Netroid qui a basé Volley et satisfait la question précédée, avec cela, vous pouvez prendre un nouveau rappel si vous vous en souciez, vous pouvez calculer combien de temps utilisé quand réessayez et combien de temps cette requête exécute, le style de code comme ceci:
final String REQUESTS_TAG = "Request-Demo";
String url = "http://facebook.com/";
JsonObjectRequest request = new JsonObjectRequest(url, null, new Listener<JSONObject>() {
long startTimeMs;
int retryCount;
@Override
public void onPreExecute() {
startTimeMs = SystemClock.elapsedRealtime();
}
@Override
public void onFinish() {
RequestQueue.add(request);
NetroidLog.e(REQUESTS_TAG);
}
@Override
public void onRetry() {
long executedTime = SystemClock.elapsedRealtime() - startTimeMs;
if (++retryCount > 5 || executedTime > 30000) {
NetroidLog.e("retryCount : " + retryCount + " executedTime : " + executedTime);
mQueue.cancelAll(REQUESTS_TAG);
} else {
NetroidLog.e(REQUESTS_TAG);
}
}
});
request.setRetryPolicy(new DefaultRetryPolicy(5000, 20, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
request.setTag(REQUESTS_TAG);
RequestQueue.add(request);
Netroid a également beaucoup d'autres fonctionnalités maniables et puissantes, j'espère que cela vous aidera assez :).
Vous pouvez définir la variable de compteur pour essayer de temps spécifique à ce qui en fait pleine récursive
static int count=10; //so its will try ten time
public void userLogin(final View view)
{
final RequestQueue requestQueue= Volley.newRequestQueue(getApplicationContext());
String url = "http://192.168.43.107/mobodb/register.php";
StringRequest stringRequest=new StringRequest(Request.Method.POST,url,new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
Toast.makeText(getApplicationContext(),"Updated",Toast.LENGTH_LONG).show();
}
}
},new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
count=count-1;
Toast.makeText(getApplicationContext(),"Retry left"+count,Toast.LENGTH_LONG).show();
if (count>0) {
// note : may cause recursive invoke if always timeout.
userLogin(view);
}
else
{
Toast.makeText(getApplicationContext(),"Request failed pls check network connection or the error is "+error.getMessage(),Toast.LENGTH_LONG).show();
}
}
})
{
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String,String> paramter=new HashMap<String,String>();
paramter.put("name",login_name);
paramter.put("user_pass",login_pass);
return paramter;
}
};
requestQueue.add(stringRequest);
stringRequest.setRetryPolicy(new DefaultRetryPolicy(20 * 1000, 10, 1.0f));
vous pouvez également vérifier la réponse dans laquelle vous pouvez revenir de php et de traiter dans votre classe java
@Override
public void onResponse(String response) {
if(response.contains("no record found for"))
Toast.makeText(getApplicationContext(),response.toString(),Toast.LENGTH_LONG).show();
else
{
Toast.makeText(getApplicationContext(),"Updated num of row is"+response.toString(),Toast.LENGTH_LONG).show();
}
}
votre code PHP sera
if($res){
$resp=mysql_affected_rows();
if($resp==0)
{
$resp="no record found for".$_POST['name'];
}
if($resp==1 or $resp>1)
{
$resp=mysql_affected_rows();
}else $resp="efrror is".mysql_error();
- 1. Android Volley Demander Identity onErrorResponse Section
- 2. Android-Volley: Définir la politique de réessayer sur ImageLoader
- 3. Comment obtenir une réponse d'erreur JSON dans Volley onErrorResponse
- 4. Paramètre Demande Volley prioritaire
- 5. Android Volley code 400
- 6. ajouter des entêtes google volley demande?
- 7. NSURLConnection réessayer demande
- 8. Volley envoyer plusieurs demandes Android
- 9. Parse réponse Android JSONArray Volley
- 10. Android Volley Requestqueue
- 11. Android Volley Library
- 12. demande POST avec le corps JSON dans Volley Android
- 13. Volley android Json comment créer une interface
- 14. Volley demande Définit la valeur précédente à textview
- 15. Volley ne m'appelle pas getParams() pour la demande POST standard
- 16. Android Volley, JsonObjectRequest mais recevoir JsonArray
- 17. Comment interagir logique de rappel d'erreur avec réessayer en utilisant android Volley?
- 18. Android Volley JsonRequest
- 19. Lorsque la demande Volley est annulée
- 20. HTTP Publier une demande à l'aide de Volley
- 21. Code d'erreur 307 volley
- 22. Code Android Studio 500 de Volley POST
- 23. RestKit: Comment réessayer une demande ayant échoué?
- 24. Bibliothèque Android Volley: devons-nous toujours répéter Response.Listener et Response.ErrorListener
- 25. Android Volley Json Données Pas de collecte
- 26. Volley Erreur lors de l'envoi de la demande de publication
- 27. Manipulation de délai de réponse dans android en utilisant volley
- 28. Volley ne m'appelle pas getParams()
- 29. Android Volley renvoie la valeur de la réponse
- 30. Android volley: comment vérifier le type json avant de l'analyser
vous pouvez exécuter même demande à nouveau après avoir obtenu erreur délai d'attente, avez-vous essayé? – VinceStyling
comment puis-je l'exécuter depuis onResponse? Dois-je utiliser le VolleyPorvider.addRequest() dans le onResponse? – user3009752