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.