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