android - Square Retrofit repeats network calls -
i using square's retrofit library handle networking application. have noticed library makes repeated http calls no apparent reason , not know why.
i have verified call interface method executed once android activity (ie.userapi.getuserbyfacebookidasync()).
has experimented too? perhaps has okhttp library setup?
any appreciated.
retrofit logging
08-18 21:25:56.895 30331-30372/com.package.name d/retrofit﹕ ---> http http://server-instance:8080/server-app//user/facebook?facebookid=00000000 08-18 21:25:56.895 30331-30372/com.package.name d/retrofit﹕ facebookid: 00000000 08-18 21:25:56.895 30331-30372/com.package.name d/retrofit﹕ facebooktoken: xxxxx 08-18 21:25:56.895 30331-30372/com.package.name d/retrofit﹕ ---> end http (no body) 08-18 21:25:57.434 30331-30372/com.package.name d/retrofit﹕ ---> http http://server-instance:8080/server-app//user/facebook?facebookid=00000000 08-18 21:25:57.434 30331-30372/com.package.name d/retrofit﹕ facebookid: 00000000 08-18 21:25:57.434 30331-30372/com.package.name d/retrofit﹕ facebooktoken: xxxxx 08-18 21:25:57.434 30331-30372/com.package.name d/retrofit﹕ ---> end http (no body) 08-18 21:25:57.441 30331-30359/com.package.name d/retrofit﹕ ---> http http://server-instance:8080/server-app/user/facebook?facebookid=00000000 08-18 21:25:57.441 30331-30359/com.package.name d/retrofit﹕ facebookid: 00000000 08-18 21:25:57.441 30331-30359/com.package.name d/retrofit﹕ facebooktoken: xxxxx 08-18 21:25:57.441 30331-30359/com.package.name d/retrofit﹕ ---> end http (no body) 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ <--- http 200 http://server-instance:8080/server-app/user/facebook?facebookid=00000000 (770ms) 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ : http/1.1 200 ok 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ content-type: application/json 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ date: tue, 19 aug 2014 02:05:59 gmt 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ okhttp-received-millis: 1408413959446 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ okhttp-response-source: conditional_cache 200 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ okhttp-selected-protocol: http/1.1 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ okhttp-sent-millis: 1408413959001 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ server: apache-coyote/1.1 08-19 03:05:59.448 10069-10345/com.package.name d/retrofit﹕ transfer-encoding: chunked 08-19 03:05:59.456 10069-10345/com.package.name d/retrofit﹕ {"id":4,"facebookid":"00000000","gender":"male","city":"barcelona","country":"spain","firstname":"john","premium":false} 08-19 03:05:59.456 10069-10345/com.package.name d/retrofit﹕ <--- end http (390-byte body) the responses 2 calls received too, not included in logging sample.
network call (activity code included further below)
userapi.getuserbyfacebookidasync(user.getid(), new callback<user>() { @override public void success(user user, response response) {} @override public void failure(retrofiterror error) {} retrofit api interface method
@get("/user/facebook") void getuserbyfacebookidasync(@query("facebookid") string facebookid, callback<user> cb); retrofit api handler
public class apihandler { static requestinterceptor requestinterceptor = new requestinterceptor() { @override public void intercept(requestfacade request) { request.addheader("facebookid", constants.facebook_id); request.addheader("facebooktoken", constants.facebook_token); } }; private static restadapter restadapter; private static restadapter getrestadapter() { if (restadapter == null) { restadapter = new restadapter.builder(). setrequestinterceptor(requestinterceptor). setloglevel(restadapter.loglevel.full). setclient(constants.ok_client). setendpoint(baseapi.getinstance().base_url).build(); } return restadapter; } public static userapi getuserapi() { userapi userapi = null; try { if (restadapter == null) { restadapter = getrestadapter(); } userapi = restadapter.create(userapi.class); } catch (exception e) { e.printstacktrace(); } return userapi; }} okhttp setup (on app startup)
int cachesize = 10 * 1024 * 1024; // 10 mib file cachedirectory = new file(getapplicationcontext().getcachedir().getabsolutepath(), "httpcache"); cache cache = null; try { cache = new cache(cachedirectory, cachesize); } catch (ioexception e) { e.printstacktrace(); } okhttpclient okhttpclient = new okhttpclient(); okhttpclient.setcache(cache); constants.ok_client = new okclient(okhttpclient); android activity
public class currentuserprofileactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.current_user_profile_activity_layout); userapi = apihandler.getuserapi(); clubapi = apihandler.getclubapi(); visitapi = apihandler.getvisitapi(); picasso = pablopicasso.withdebug(this); userprofilepicture = (imageview) findviewbyid(r.id.userprofilepicture); makemerequest(session.getactivesession()); userprofilepicture.setontouchlistener(new view.ontouchlistener() { @override public boolean ontouch(view v, motionevent event) { intent intent = new intent(getbasecontext(), picturevieweractivity.class); intent.putextra("facebookid", muser.getfacebookid()); startactivity(intent); return false; } }); } private void makemerequest(final session session) { request request = request.newmerequest(session, new request.graphusercallback() { @override public void oncompleted(graphuser user, com.facebook.response response) { // if response successful if (session == session.getactivesession()) { if (user != null) { userapi.getuserbyfacebookidasync(user.getid(), new callback<user>() { @override public void success(user user, response response) { muser = user; } @override public void failure(retrofiterror error) { log.d(tag, "userapi call user object server failed!"); } }); } } if (response.geterror() != null) { intent introactivityintent = new intent(currentuserprofileactivity.this, introactivity.class); introactivityintent.setflags(intent.flag_activity_new_task | intent.flag_activity_clear_task); startactivity(introactivityintent); finish(); } } } ); request.executeasync(); }}
there post on medium about, explains
you can disable request retrying globally whole
okhttpclientinstance. done usingokhttpclient.builder, settingretryonconnectionfailurefalse.
Comments
Post a Comment