Retrofit + Okhttp cancelar operación no funciona

Estoy usando retrofit en mi aplicación como esta

final OkHttpClient okHttpClient = new OkHttpClient(); okHttpClient.interceptors().add(new YourInterceptor()); final OkClient okClient = new OkClient(okHttpClient); Builder restAdapterBuilder = new RestAdapter.Builder(); restAdapterBuilder.setClient(okClient).setLogLevel(LogLevel.FULL) .setEndpoint("some url"); final RestAdapter restAdapter = restAdapterBuilder.build(); public class YourInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { // TODO Auto-generated method stub Request request = chain.request(); if (request != null) { Request.Builder signedRequestBuilder = request.newBuilder(); signedRequestBuilder.tag("taggiventorequest"); request = signedRequestBuilder.build(); request.tag(); } return chain.proceed(request); } } 

después de enviar la solicitud estoy llamando

 okHttpClient.cancel("taggiventorequest"); 

pero la petición no está cancelando estoy recibiendo la respuesta de retrofit No sé por qué no se cancela mi solicitud

Necesito volley como retrofit de cancelación

Como Retrofit API Spec , la solicitud de cancelación se incluirá en la versión 2.0.

cancel () es un no-op después de que la respuesta ha sido recibida. En todos los demás casos el método establecerá cualquier devolución de llamada a null (liberando así referencias fuertes a la clase enclosing si se declara anónimamente) y procesará el objeto request. Todas las futuras interacciones con el objeto de petición lanzarán una excepción. Si la solicitud está esperando en el ejecutor su futuro será cancelado para que nunca se invoca.

Por ahora, puede hacerlo creando una clase de devolución de llamada personalizada que se implementa en la devolución de llamada de retrofit.

 public abstract class CancelableCallback<T> implements Callback<T> { private boolean canceled; private T pendingT; private Response pendingResponse; private RetrofitError pendingError; public CancelableCallback() { this.canceled = false; } public void cancel(boolean remove) { canceled = true; } @Override public void success(T t, Response response) { if (canceled) { return; } onSuccess(t, response); } @Override public void failure(RetrofitError error) { if (canceled) { return; } onFailure(error); } protected abstract void onSuccess(T t, Response response); protected abstract void onFailure(RetrofitError error); } 

MyApi.java,

 private interface MyApi { @GET("/") void getStringList(Callback<List<String>> callback); } 

En Actividad o Fragmento,

 RestAdapter restAdapter = new RestAdapter.Builder() .setEndpoint(Config.URL) .build(); MyApi service = restAdapter.create(MyApi.class); CancelableCallback callback = new CancelableCallback<List<String>>() { @Override protected void onSuccess(List<String> stringList, Response response) { for (String str : stringList) { Log.i("Result : ", str); } } @Override protected void onFailure(RetrofitError error) { Log.e("Error : ", error.getMessage() + ""); } }; service.getStringList(callback); 

Para cancelar su solicitud, llame

 callback.cancel(); 

Este es un ejemplo sencillo para cancelar cada solicitud. Puede manejar (cancelar, pausar, reanudar) dos o más solicitudes al mismo tiempo creando una clase de gestor de llamadas. Por favor, eche un vistazo a ese comentario para referencia.

Espero que sea útil para usted.

El problema es que la solicitud se ha completado, desde los documentos:

http://square.github.io/okhttp/javadoc/com/squareup/okhttp/OkHttpClient.html#cancel-java.lang.Object-

 cancel 

public OkHttpClient cancel (etiqueta de objeto)

Cancela todas las llamadas programadas o en vuelo etiquetadas con la etiqueta. Las solicitudes que ya están completas no se pueden cancelar.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.