I am using firebasedatabase to show my data into recyclerview. I want to show simple toast when my recyclerview is empty and i am using dataSnapshot.hasChildren()
for checking the database haschildren or not. here is code
JavaScript
x
private void Geofireinit() {
started = true;
databaseReference=FirebaseDatabase.getInstance().getReference().child(("tracker"));
GeoFire fire=new GeoFire(databaseReference);
GeoQuery geoQuery = fire.queryAtLocation(new GeoLocation(20.887715, 77.757623), 50);
geoQuery.addGeoQueryEventListener(new GeoQueryEventListener() {
@Override
public void onKeyEntered(String key, GeoLocation location) {
Log.e("id", key);
getkeys(key);
}
@Override
public void onKeyExited(String key) {
Log.d("TAG", "onKeyExited: ");
for (int i=0;i<arrayList.size();i++)
{
Log.i("tte",String.valueOf(arrayList.get(i).getText()));
if (key.equals(arrayList.get(i).getText())) {
arrayList.remove(i);
adapter.notifyItemRemoved(i);
}
if (arrayList.size()==0)
{
Log.i("exited",String.valueOf(arrayList.size()));
}
}
}
@Override
public void onKeyMoved(String key, GeoLocation location) {
}
@Override
public void onGeoQueryReady() {
}
@Override
public void onGeoQueryError(DatabaseError error) {
}
});
}
ArrayList<Mylist> arrayList=new ArrayList<>();
private void getkeys(String key)
{
myref=FirebaseDatabase.getInstance().getReference().child("buses").child(key);
myref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists())
{
Mylist mylist=new Mylist();
mylist.setText(dataSnapshot.child("text").getValue().toString());
arrayList.add(mylist);
adapter=new Adapter(MainActivity.this,arrayList);
recyclerView.setAdapter(adapter);
Log.i("chaadad", String.valueOf(dataSnapshot.hasChild("buses")));
}
if (dataSnapshot.hasChildren())
{
// do something
}else
Toast.makeText(MainActivity.this,"empty",Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
when data is available the dataSnapshot.hasChildren() giving true value but when no data available else condition is not working
Advertisement
Answer
you can use dataSnapshot.getChildrenCount()
JavaScript
if (dataSnapshot.getChildrenCount() > 0)
{
// do something
} else
Toast.makeText(MainActivity.this,"empty",Toast.LENGTH_SHORT).show();
Update:
check the else condition for the .exists() for empty list
JavaScript
if (dataSnapshot.exists())
{
Mylist mylist=new Mylist();
mylist.setText(dataSnapshot.child("text").getValue().toString());
arrayList.add(mylist);
adapter=new Adapter(MainActivity.this,arrayList);
recyclerView.setAdapter(adapter);
Log.i("chaadad", String.valueOf(dataSnapshot.hasChild("buses")));
} else
Toast.makeText(MainActivity.this,"empty",Toast.LENGTH_SHORT).show();