Why Android Circle Progress Dialog Getting Freezes when Bunch of Data Syncing from Server to Local DB Using Retrofit -
1.iam fetching bulk of data server , inserting in local database while login in android.
2.for syncing purpose have used retrofit library, syncing , inserting working fine.
my problem: while syncing bunch of data server using retrofit ,circle progress dialog getting freeze.
help me how fix issue.
edit:1
called retrofit method inside async task ,still circle progressdialog getting freeze
//calling async task
asynctask_getdata task=new asynctask_getdata(tokentype_stringvalue,access_token_stringvalue, id_stringvalue); task.execute();
//asynctask method
public class asynctask_getdata extends asynctask<string,void,void> { string tokentype_stringvalueitem; string access_token_stringvalueitem; string id_stringvalueitem; public asynctask_getdata(string tokentype_stringvalueitem, string access_token_stringvalueitem, string id_stringvalueitem) { tokentype_stringvalueitem = tokentype_stringvalueitem; access_token_stringvalueitem = access_token_stringvalueitem; id_stringvalueitem = id_stringvalueitem; } @override protected void onpreexecute() { super.onpreexecute(); if (!pdialog.isshowing()) { pdialog.setindeterminate(true); pdialog.setcanceledontouchoutside(false); pdialog.setmessage("please wait getting data..."); pdialog.show(); } } @override protected void onpostexecute(void avoid) { super.onpostexecute(avoid); } @override protected void doinbackground(string... params) { getlogindatacall(tokentype_stringvalueitem, access_token_stringvalueitem, id_stringvalueitem ); return null; } } private void getlogindatacall(string tokentype_string, string access_token_stringvalue, string routeid_string) { string tokenadd = tokentype_string + " access_token_stringvalue; sisclient.getapi().getalldata(tokenadd, routeid_string, new callback<commonresponse>() { @override public void success(commonresponse commonresponse, response response) { timber.d("sendotpapicall%s", commonresponse.getstatuscode()); switch (commonresponse.getstatuscode()) { case 200: try { jsonarray jsonarray = null; try { jsonarray = new jsonarray(commonresponse.getroutemaster()); if (!commonresponse.getroutemaster().equals("[]")) { (int = 0; < jsonarray.length(); i++) { jsonobject jsonobject = jsonarray.getjsonobject(i); routeid_stringvalue = jsonobject.getstring("routeid"); asynxfor_route_master_insert(routeid_stringvalue); } } else { system.out.println("route master null ::" + commonresponse.getstatusmessage() + "\n"); } } catch (exception e) { e.printstacktrace(); ; } break; case 404: pdialog.dismiss(); toast.maketext(loginpage.this, r.string.wrong_username_or_password, toast.length_long).show(); break; case 500: pdialog.dismiss(); toast.maketext(loginpage.this, r.string.something_wrong, toast.length_long).show(); break; } } @override public void failure(retrofiterror error) { try { if (error != null) { pdialog.dismiss(); timber.i("sendotpapicall error %s", error.getresponse().getstatus()); string json = new string(((typedbytearray) error.getresponse().getbody()).getbytes()); timber.i("failure error %s", json.tostring()); jsonobject json1 = new jsonobject(json.tostring()); string json1string = json1.getstring("statusmessage"); switch (error.getresponse().getstatus()) { case 404: toast.maketext(getapplicationcontext(), r.string.wrong_username_or_password, toast.length_long).show(); break; case 500: toast.maketext(loginpage.this, r.string.something_wrong, toast.length_long).show(); break; default: toast.maketext(loginpage.this, json1string, toast.length_long).show(); break; } } else { timber.i("failure error %s", "recieving error null rom server"); } } catch (exception e) { e.printstacktrace(); toast.maketext(loginpage.this, r.string.something_wrong, toast.length_long).show(); } } }); }
there's no reason make sync retrofit call in case, should use async call provided out of box retrofit. it's simple, , can manage progressbar states using callbacks.
imo should not use asynctask @ all. if want explore check out this, this , this.
example code conversion retrofit v1 sync call asynctask, retrofit 2 async call, managed in api class , using otto event bus message passing:
public class apiservice { private static apiservice instance; // thwart instantiation protecting protected apiservice() { // nothing } public static apiservice getinstance() { if (instance == null) { instance = new apiservice(); } return instance; } // ----------------------------------------------------------------------------------- private static final string base_url = "http://api.service.com/"; private interface apiserviceinterface { @get("your/endpoint") call<commonresponse> postlogin(@query("token_add") string tokenadd, @query("route_id") string routeid); } private apiserviceinterface apiserviceinterface = null; private apiserviceinterface getinterface() { if (apiserviceinterface == null) { httplogginginterceptor interceptor = new httplogginginterceptor(); interceptor.setlevel(httplogginginterceptor.level.body); okhttpclient client = new okhttpclient.builder() .addinterceptor(interceptor) .build(); retrofit retrofit = new retrofit.builder() .client(client) .baseurl(base_url) .addconverterfactory(gsonconverterfactory.create()) .build(); apiserviceinterface = retrofit.create(apiserviceinterface.class); } return apiserviceinterface; } public void dogetdata(dialog pdialog, string tokentype_string, string access_token_stringvalue, string routeid_string) { if (!pdialog.isshowing()) { pdialog.setindeterminate(true); pdialog.setcanceledontouchoutside(false); pdialog.setmessage("please wait getting data..."); pdialog.show(); } string tokenadd = tokentype_string + access_token_stringvalue; getinterface().postlogin(tokenadd, routeid_string) .enqueue(new callback<socketctrlresponse>() { @override public void onresponse(call<commonresponse> call, response<commonresponse> response) { timber.d("sendotpapicall%s", commonresponse.getstatuscode()); switch (commonresponse.getstatuscode()) { case 200: jsonarray jsonarray = null; try { jsonarray = new jsonarray(commonresponse.getroutemaster()); if (!commonresponse.getroutemaster().equals("[]")) { (int = 0; < jsonarray.length(); i++) { jsonobject jsonobject = jsonarray.getjsonobject(i); routeid_stringvalue = jsonobject.getstring("routeid"); //asynxfor_route_master_insert(routeid_stringvalue); eventbus.getdefault().post(new getdataresponseevent(routeid_stringvalue)); } } else { system.out.println("route master null ::" + commonresponse.getstatusmessage() + "\n"); } } catch (exception e) { e.printstacktrace(); } break; case 404: pdialog.dismiss(); toast.maketext(loginpage.this, r.string.wrong_username_or_password, toast.length_long).show(); eventbus.getdefault().post(new getdataresponseevent("")); break; case 500: pdialog.dismiss(); toast.maketext(loginpage.this, r.string.something_wrong, toast.length_long).show(); eventbus.getdefault().post(new getdataresponseevent("")); break; } } @override public void onfailure(call<commonresponse> call, throwable t) { t.printstacktrace(); pdialog.dismiss(); toast.maketext(loginpage.this, r.string.something_wrong, toast.length_long).show(); eventbus.getdefault().post(new getdataresponseevent("")); } }); } }
you'll need event class wrap data expect api, e.g.:
public class getdataresponseevent { private final string data; public getdataresponseevent(string data) { this.data = data; } public string getdata() { return data; } }
and example calling service activity
:
public class youractivity extends activity { dialog pdialog; // ... @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // init pdialog, content view, etc. eventbus.getdefault().register(this); // ... } // ... public void getdatafromapi() { apiservice.getinstance().dogetdata(pdialog, tokentype_stringvalue,access_token_stringvalue, id_stringvalue); } // ... public void onevent(getdataresponseevent event) { string data = event.getdata(); asynxfor_route_master_insert(data); } // ... }
note again you'll have upgrade retrofit 2 , use otto. i've guessed implementation mightn't work is, should sketch feel of it.
Comments
Post a Comment