【发布时间】:2020-10-22 04:26:22
【问题描述】:
我有以下代码应该从 Firebase 读取数据并将其添加到数组列表 namesList 和 addressList。我记录了 onDataChange 事件的值。 logcat 显示数据实际上已被读取,但是当我迭代列表时,它的大小为零。谁能帮我解决这个问题:
@Override
public void onStart() {
super.onStart();
activeOrders = FirebaseDatabase.getInstance().getReference().child("Ordered Items");
activeOrders.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
for (DataSnapshot child: snapshot.getChildren())
{
key = child.getKey().toString();
name = FirebaseDatabase.getInstance().getReference().child("Users").child(key).child("name");
address = FirebaseDatabase.getInstance().getReference().child("Users").child(key).child("shippingAddr");
name.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Log.i("Username", snapshot.getValue().toString());
namesList.add(snapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
address.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
Log.i("Address", snapshot.getValue().toString());
addressList.add(snapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Toast.makeText(this, "Size:" + namesList.size(), Toast.LENGTH_SHORT).show();
for(int i=0; i<namesList.size(); i++){
Toast.makeText(this, namesList.get(i).toString(), Toast.LENGTH_SHORT).show();
}
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signOutUser();
}
});
【问题讨论】:
-
请编辑问题以显示您期望此代码执行的操作与您期望的不同。它还应该显示您尝试查询的数据。如果没有看到数据,我们就无法知道查询是否有意义。
标签: android firebase firebase-realtime-database arraylist