Android 无法从Firebase数据库读取数据 代码
正在从onDataChange中的数据库读取数据,但我无法从mShops列表中存储和读取数据。如果能帮助我找出此数据未存储在列表中的原因,我将不胜感激。根据Alex的建议编辑。 这里可以做的是将每个数据从Android 无法从Firebase数据库读取数据 代码,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,正在从onDataChange中的数据库读取数据,但我无法从mShops列表中存储和读取数据。如果能帮助我找出此数据未存储在列表中的原因,我将不胜感激。根据Alex的建议编辑。 这里可以做的是将每个数据从onDataChange()传递到另一个方法并从那里访问它,或者如果您只是计划在日志上打印数据,请尝试移动这一行(不使用final) 要解决此问题,只需将mShops列表的声明移动到onDataChange()中,如下所示: mRef.child("shops").addValueEventLi
onDataChange()
传递到另一个方法并从那里访问它,或者如果您只是计划在日志上打印数据,请尝试移动这一行(不使用final)
要解决此问题,只需将
mShops
列表的声明移动到onDataChange()
中,如下所示:
mRef.child("shops").addValueEventListener(new ValueEventListener() {}
mRef.child(“shops”).addValueEventListener(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
List mShops=new ArrayList();
对于(DataSnapshot noteSnapshot:DataSnapshot.getChildren()){
车间数据=noteSnapshot.getValue(Shop.class);
Log.e(“Log”,data.getName()+“”+data.getUrl());
mShops.add(数据);
}
适用于(商店:mShops){
Log.e(“mShops”,shop.getName()+“”+shop.getUrl());
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
Log.d(“Log”,databaseError.getMessage());
}
});
注意,使用此代码,您的
ArrayList
不需要是最终的。请记住,onDataChange()
方法具有异步行为,这意味着即使在您尝试将类Shop
的对象添加到列表之前,也会调用该方法。您是否排除了未使用适配器调用notifyDataSetChanged()的可能性,假设列表中有一个适配器?数据似乎存储在list.side中。注意,对于(Shop:mShops){}操作不是很好的做法,因为操作是异步的,在填充所有项之后,outter for each循环可能会运行,也可能不会运行。在for循环之后,从onDataChange调用一个方法,在for循环中向mShops添加数据。在该方法中,尝试使用mShops打印。那就行了。提供你的firebase数据库模式这是完全错误的。当您使用final
关键字时,这并不意味着您不能向列表中添加元素,而是意味着编译器确保您只能初始化变量一次。换句话说,您无法将新值重新分配给mShops
对象。谢谢您提供的信息。但我也经历过同样的情况,如果列表被声明为final,它将永远不会添加一个对象。那么,我能为mShops增值吗?如果是,那么是否有办法确保添加元素?再次感谢。我刚刚有机会了解并澄清我对“final”关键字的疑问+1.
E/log: Levi's https://firebasestorage.googleapis.com/v0/b/fir-87605.appspot.com/o/storefront27.jpg?alt=media&token=4ea27811-4e06-4bf5-8b96-44a583040088
E/log: Dunkin Donuts https://firebasestorage.googleapis.com/v0/b/fir-87605.appspot.com/o/dunkin.jpg?alt=media&token=f63c6d5f-b074-47ae-a8ca-6f7974ddbd47
E/log: Pizza Parlor https://firebasestorage.googleapis.com/v0/b/fir-87605.appspot.com/o/download.jpg?alt=media&token=1eb9a9bb-495d-416b-9a84-3699214149b9
E/log: Town Bakers https://firebasestorage.googleapis.com/v0/b/fir-87605.appspot.com/o/download%20(1).jpg?alt=media&token=01b16918-272f-4a9f-9607-61f559d30360
List<Shop> mShops = new ArrayList<>();
mRef.child("shops").addValueEventListener(new ValueEventListener() {}
mRef.child("shops").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Shop> mShops = new ArrayList<>();
for (DataSnapshot noteSnapshot: dataSnapshot.getChildren()){
Shop data = noteSnapshot.getValue(Shop.class);
Log.e("log", data.getName()+" "+data.getUrl());
mShops.add(data);
}
for (Shop shop : mShops) {
Log.e("mShops", shop.getName()+" "+shop.getUrl());
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("LOG", databaseError.getMessage());
}
});