java - 如何使用 dataSnapshot.hasChildren() 检查 recyclerview 是否为空
问题描述
我正在使用 firebasedatabase 将我的数据显示到 recyclerview 中。当我的 recyclerview 为空并且我dataSnapshot.hasChildren()
用于检查数据库是否有子项时,我想显示简单的 toast。这是代码
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) {
}
});
}
当数据可用时 dataSnapshot.hasChildren() 给出真实值但当没有可用数据时其他条件不起作用
解决方案
您可以使用dataSnapshot.getChildrenCount()
if (dataSnapshot.getChildrenCount() > 0)
{
// do something
} else
Toast.makeText(MainActivity.this,"empty",Toast.LENGTH_SHORT).show();
更新:
检查 .exists() 的 else 条件以获取空列表
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();