voz software sistema quitar por operativo integradas google dictado desactivar compras como automaticas actualizaciones actualizacion android rest http-post android-volley

android - software - ¿Cómo deshabilitar la solicitud Volley de reintentar?



desactivar ok google (4)

Publico un JsonRequest en un servidor. El servidor es lento. Volley tiende a realizar varias llamadas al servidor lento porque no obtuvo una respuesta de la primera solicitud (ya que mi servidor es lento). ¿Hay alguna manera de impedir que Volley vuelva a intentar una solicitud para que pueda recibir la primera respuesta?

Yo he tratado:

myRequest.setRetryPolicy(new DefaultRetryPolicy( TIMEOUT_MS, RETRIES, BACKOFF_MULT));

He reemplazado TIMEOUT_MS = 0, RETRIES = 0 e incluso BACKOFF_MULT = 0, pero no funciona.

¿Cualquier otra sugerencia?


La política predeterminada de reintento de Volley es:

/** The default socket timeout in milliseconds */ public static final int DEFAULT_TIMEOUT_MS = 2500; /** The default number of retries */ public static final int DEFAULT_MAX_RETRIES = 1; /** The default backoff multiplier */ public static final float DEFAULT_BACKOFF_MULT = 1f;

Lo puedes encontrar en DefaultRetryPolicy.java,

para que pueda ver que volley realiza 1 solicitud de reintento de forma predeterminada.

Intente usar un TIMEOUT más pequeño (si no desea esperar los 2500 ms) o más de 2500 ms para obtener la respuesta, pero mantenga los otros valores, por ejemplo:

// Wait 20 seconds and don''t retry more than once myRequest.setRetryPolicy(new DefaultRetryPolicy( (int) TimeUnit.SECONDS.toMillis(20), DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


Para evitar que Volley vuelva a intentar una solicitud, simplemente establezca la política de reintento de la solicitud en DefaultRetryPolicy con maxNumRetries siendo 0:

myRequest.setRetryPolicy(new DefaultRetryPolicy( DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 0, // maxNumRetries = 0 means no retry DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));


Prueba esto,

// remove caching jsObjRequest.setShouldCache(false); // Wait 30 seconds and don''t retry more than once jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(0, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

Método llamada forma tarea

public void callWebService(JSONObject jsonRequest) { JsonObjectRequest jsObjRequest = new JsonObjectRequest( Request.Method.POST, url + pageurl, jsonRequest, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject jsonObject) { sendResponse(jsonObject); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { callBack.onError(error); try { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } } catch (Exception e) { Helper.customPrintStackTrace(e); } } } ) { @Override public String getBodyContentType() { return "application/json; charset=utf-8"; } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> params = new HashMap<String, String>(); params.put(WebConfig.WebParams.APIKEY, Helper .getStringValuefromPrefs(context, SharedPreferencesKey.PREF_APIKEY)); params.put(WebConfig.WebParams.APITOKEN, Helper .getStringValuefromPrefs(context, SharedPreferencesKey.PREF_APITOKEN)); if (!Helper.getStringValuefromPrefs(context, SharedPreferencesKey.PREF_USERID).equals("")) { params.put(WebConfig.WebParams.USER_ID, Helper .getStringValuefromPrefs(context, SharedPreferencesKey.PREF_USERID)); } else { params.put(WebConfig.WebParams.USER_ID, "0"); } return params; } }; // remove caching jsObjRequest.setShouldCache(false); // Wait 30 seconds and don''t retry more than once jsObjRequest.setRetryPolicy(new DefaultRetryPolicy(0, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); // Access the RequestQueue through your singleton class. VolleySingleton.getInstance(context).addToRequestQueue(jsObjRequest); if (showDefultProcess) { progressDialog.show(); } }


Utilizando su objeto StringRequest o su objeto JsonObjectRequest o su objeto JsonArrayRequest, llame a este método.

Por ejemplo, si el objeto es una instancia de StringRequest, aquí está el método:

stringRequest.setRetryPolicy(new DefaultRetryPolicy(initialTimeoutMs, maxNumRetries, backoffMultiplier ));

initialTimeoutMs El tiempo de espera inicial para la política.

maxNumRetries El número máximo de reintentos.

BackoffMultiplier Backoff multiplicador para la política.

A continuación se muestran los parámetros que di.

stringRequest.setRetryPolicy(new DefaultRetryPolicy(10 * 1000, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

El primer parámetro dice establecer InitialTimeout en 10 segundos.

El segundo parámetro dice que el recuento de reintentos se intenta en 0.

El tercer parámetro es el predeterminado.