android - Retrofit + Okhttp cancel operation not working -


i using retrofit in application this

 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);     } } 

after sending request calling

okhttpclient.cancel("taggiventorequest"); 

but request not cancelling getting response retrofit dont know why not cancelling request

i need volley cancelation retrofit

as retrofit api spec, canceling request included in version 2.0.

cancel() no-op after response has been received. in other cases method set callbacks null (thus freeing strong references enclosing class if declared anonymously) , render request object dead. future interactions request object throw exception. if request waiting in executor future cancelled never invoked.

for now, can creating custom callback class implements on callback 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); } 

in activity or fragment,

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) {         (string str : stringlist) {             log.i("result : ", str);         }     }      @override     protected void onfailure(retrofiterror error) {         log.e("error : ", error.getmessage() + "");     } };  service.getstringlist(callback); 

to cancel request, simple call

callback.cancel(); 

this simple example cancel each request. can handle (cancel, pause, resume) 2 or more request @ same time creating callback manager class. please take that comment reference.

hope useful you.


Comments