android - How to Detect if Firebase Listeners finished fetching Data? -


i'm using firebase valueeventlistener in android app retreive data database initialize ui, problem never know when data fetching done , depends on speed of user's internet connection, i'm making delay of 5 seconds listeners finish fetching data it's not enough , data still null giving null pointer exception. want know when firebase listeners finish fetching data able update ui .

this 1 method fetch data :

      public void getrequests(){           retrieve.addvalueeventlistener(new valueeventlistener() {         @override         public void ondatachange(datasnapshot datasnapshot) {      iterable<datasnapshot> games = datasnapshot.getchildren();               for(com.google.firebase.database.datasnapshot game : games ){                  string game_key = game.child("gamekey").getvalue(string.class);                 string game_location = game.child("location").getvalue(string.class);                 string userid_sender = game.child("userid").getvalue(string.class);                 adapter_game_key.add(game_key);                 adapter_userid_sender.add(userid_sender);            }         }         @override         public void oncancelled(databaseerror databaseerror) {          }     }); } 

here try data firebase listeners in arraylist able initialize ui passing arraylists adapter of listview.

anyone has solution please ?

do ui updates inside ondatachanged() method follows:

    arraylist<ad> adarraylist_1 = new arraylist<>();     databasereference ref = firebasedatabase.getinstance().getreference().child("ads");      listview listview_1 = (listview) findviewbyid(r.id.market_list_view_1);      marketarrayadapter marketarrayadapter = new marketarrayadapter(             this,             adarraylist_1     );      listview_1.setadapter(marketarrayadapter);              ref.addvalueeventlistener(new valueeventlistener() {                 @override                 public void ondatachange(datasnapshot datasnapshot) {                     adarraylist_1.clear();                     for(datasnapshot snapshot : datasnapshot.getchildren()){                         ad ad = snapshot.getvalue(ad.class);                         adarraylist_1.add(ad);                      }                     marketarrayadapter.notifydatasetchanged();                 }                  @override                 public void oncancelled(databaseerror databaseerror) {                  }             }); 

my adapter class below

public marketarrayadapter(context context, arraylist<ad> list) {     super(context, 0, list); }  @nonnull @override public view getview(int position, view convertview, viewgroup parent) {      final ad ad = getitem(position);     if (convertview == null) {         convertview = layoutinflater.from(getcontext()).inflate(r.layout.ad_item, parent, false);     }     imageview imageview = (imageview) convertview.findviewbyid(r.id.ads_profile_pic);     textview title = (textview) convertview.findviewbyid(r.id.ads_title);     textview price = (textview) convertview.findviewbyid(r.id.ads_price);     textview description = (textview) convertview.findviewbyid(r.id.ads_short_description);      byte[] imageasbytes = base64.decode(ad.getapictureuri().getbytes(), base64.default);     imageview.setimagebitmap(bitmapfactory.decodebytearray(imageasbytes, 0, imageasbytes.length));     title.settext(ad.getatitle());     price.settext(string.valueof(ad.getaprice()));     description.settext(ad.getadescription());      parent.setonclicklistener(new view.onclicklistener() {         @override         public void onclick(view v) {             intent in = new intent(marketactivity.this, viewadactivity.class);             in.putextra("key", ad.getaid());             startactivity(in);         }     });     return convertview; } 

}

please dont forget put line marketarrayadapter.notifydatasetchanged();


Comments

Popular posts from this blog

inversion of control - Autofac named registration constructor injection -

verilog - Systemverilog dynamic casting issues -

ios - Change Storyboard View using Seague -