final List<Shop> mShops = new ArrayList<>();
mRef.child("shops").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot noteSnapshot: dataSnapshot.getChildren()){
Shop data = noteSnapshot.getValue(Shop.class);
Log.e("log", data.getName()+" "+data.getUrl());
Shops.add(data);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("LOG", databaseError.getMessage());
}
});
for (Shop shop : mShops) {
Log.e("mShops", shop.getName()+" "+shop.getUrl());
}
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
正在从onDataChange中的数据库中读取数据,但我无法从mShops列表中存储和读取数据。如果找不到此数据未存储在列表中的原因,我将不胜感激。< / p>
答案 0 :(得分:2)
要解决此问题,只需将mShops
列表的声明移到onDataChange()
内,如下所示:
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());
}
});
注意,使用此代码,您的ArrayList
不需要是最终版。请记住,onDataChange()
方法具有异步行为,这意味着甚至在您尝试将类Shop
的对象添加到列表之前就会调用它。
答案 1 :(得分:0)
在Alex的建议
之后编辑您可以在此处执行的操作是将-i ''
中的每个数据传递到另一个方法并从那里访问它,或者如果您只是计划在日志中打印数据,请尝试移动此行(不是最终的)< / p>
onDataChange()
在这个
里面List<Shop> mShops = new ArrayList<>();