检索数据有效,但我无法将检索到的数据保存到ArrayList中。在" onDataChanged()"之后方法ArrayList" profile"似乎有2个值,但在return语句中它有0。
static List<Profile> profiles = new ArrayList<Profile>();
static DatabaseReference dbr;
public static List<Profile> loadProfiles(Context context){
dbr = FirebaseDatabase.getInstance().getReference().child("users").child("hiring");
dbr.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
//String value = dataSnapshot.getValue(String.class);
//Log.d("hello", "Value is: " + value);
List<Profile> profiles2 = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
Profile profile = snapshot.getValue(Profile.class);
//Log.d("hello", profile.getCompanyName());
profiles2.add(profile);
}
profiles = profiles2;
dbr.removeEventListener(this);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w("hello", "Failed to read value.", error.toException());
}
});
return profiles;
}
答案 0 :(得分:3)
您现在无法返回尚未加载的内容。换句话说,您不能简单地在profiles
方法之外返回onDataChange()
列表,因为由于此方法的异步行为,它始终为empty
。这意味着当您尝试将该结果返回到该方法之外时,数据尚未从数据库中完成加载,这就是无法访问的原因。
快速解决此问题的方法是仅在profiles
方法中使用onDataChange()
列表,否则我建议您从 {{3}看到我的向导的最后一部分我已经解释了如何使用自定义回调来完成它。您还可以查看此 post ,以便更好地理解。