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
Post a Comment