android - JSON Download @ onCreateView leaves recyclerView empty -


    if (isconnected()) {          event  einstance = new event();         theevents = einstance.downloadevents(eventsnightlife, getactivity());         radapter = new recycleradapter(theevents);         recyclerview.setadapter(radapter);         progrsbar.setvisibility(view.gone);         .... 

this part of code runs @ "oncreateview". method downloadevents uses volley download json data, extract , return list of items (theevents). when app starts, recycler view empty. if go home screen out of app , run app again, time data gets downloaded.

i debugged step step, , @ first launch (i mean when app not resuming), theevents empty, download didn't return or manage return anything...

suggestions on how execute things before ui has been shown user or needs done approach task better?

also, use swiperefreshlayout , @ onrefresh method do:

public void onrefresh() {     event  einstance = new event();     theevents = einstance.downloadevents(eventsnightlife, getactivity());      radapter.notifydatasetchanged();      swiperefreshlayout.setrefreshing(false); } 

but doesn't work. tried to

radapter = new recycleradapter(theevents);     radapter.notifydatasetchanged();     recyclerview.swapadapter(radapter, false);  

still not working.

edit: downloadevents method implementing volley:

public list<event> downloadevents(string urlservice, context context) {     eventslist = new arraylist<>();     requestqueue requestqueue = volley.newrequestqueue(context);     jsonarrayrequest jsonarrayrequest = new jsonarrayrequest             (request.method.get, urlservice, null, new response.listener<jsonarray>() {                  @override                 public void onresponse(jsonarray response) {                      try {                         string durationstr = null;                           (int = 0; < response.length(); i++) {                             jsonobject eventjson = response.getjsonobject(i);                              string title = eventjson.getstring("eventtitle");                             string body = eventjson.getstring("eventbody");                             string date = eventjson.getstring("eventdate");                             string time = eventjson.getstring("eventtime");                             int duration = integer.parseint(eventjson.getstring("eventduration"));                             if (duration > 60) {                                 durationstr = "duration: " + duration / 60 + " h";                             } else if (duration < 60) {                                 durationstr = "duration: " + duration + " m";                             }                             string place = eventjson.getstring("eventplace");                             string organ = eventjson.getstring("organization");                              event event = new event(title, body, date, time, durationstr, place, organ);                             eventslist.add(event);                          }                      } catch (jsonexception e) {                         e.printstacktrace();                     }                  }               }, new response.errorlistener() {                  @override                 public void onerrorresponse(volleyerror error) {                     log.e("volley error", "" + error);                  }             }             );     requestqueue.add(jsonarrayrequest);     return eventslist; } 

you can use eventbus purpose simple , truth way.
here, write example how use eventbus volley.
consider want download data.

this class download methods inside (you can add more methods in future):
im used volley download data:

// download methods inside volley public class mydownloader{      public static void downloaddata(){          downloaddataevent dldataevent=new downloaddataevent();          list<string> myresult=new arraylist<>();               ...              @override              public void onresponse(jsonarray response) {                  super.onresponse(response);                  if(respone!=null){                      // want received data                      dldataevent.setdata(response);                  }                  // post event eventbus                  eventbus.getdefault().post(dldataevent);               ...           }     } } 

this event:

public class downloaddataevent{     private jsonarray mdata;      public void setdata(jsonarray data){          mdata=data;     }      public jsonarray setdata(){         return mdata;     }  } 

now want use downloaddata() method inside mainactivity:
(i called downloaddata method inside oncreate.)

public class mainactivity extends activity {      @override      protected void oncreate(bundle savedinstancestate) {          ...           // have register class eventbus subscriber:          if(!eventbus.getdefault().isregister(this)){               eventbus.getdefault().registersticky(this);          }           // call downloaddata method          if(isconnected()){               mydownloader.downloaddata();          }      }       // , receive data through eventbus, have create       //   method (subscriber) in template:      public void oneventmainthread(downloaddataevent downloaddataevent){           jsonarray result=downloaddataevent.getdata();           // want received data      } } 

you can create more 1 subscriber every want use received data.

  • i passed jsonarray downloaddataevent not good. can deserialize received data , pass downloaddataevent.
  • i used volley download data
  • maybe descriptions confusing, eventbus well-known library , easy use.

Comments

Popular posts from this blog

java - pagination of xlsx file to XSSFworkbook using apache POI -

Unlimited choices in BASH case statement -

apache - How do I stop my index.php being run twice for every user -