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
Post a Comment