如何等待从Firebase数据库中获取数据

时间:2017-07-07 13:50:12

标签: java android firebase firebase-realtime-database

我正在尝试从某个表中获取recieverUID,然后从另一个表中获取用户名的值来辅助UID。 我认为正在发生的是,在我将receivedName数组列表设置为常量时,App正常运行时,在获取receivedNames数组列表之前设置了适配器。 请告诉我这里有什么问题,以及这是否是正确的方法 这是我的数据库的样子, Firebase DB

我的Tab 3 Fragment代码

public class GetName {
private FirebaseAuth auth;
ListView listView;
private DatabaseReference mDatabase;
String receiverName;
public void GetName(String UID){
    mDatabase = FirebaseDatabase.getInstance().getReference().child("users");

    Query query = mDatabase.orderByKey().equalTo(UID);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot2) {

            // dataSnapshot is the "issue" node with all children with id 0
            for (DataSnapshot users : dataSnapshot2.getChildren()) {
                receiverName = users.child("username").getValue(String.class);

                receiverNames.add(receiverName);
                Log.d("name retrieved",receiverNames.toString());

            }


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });




}

这是我的GetName类

.container:hover {
  position:relative;
  width:calc(100% + 5px);
  left:-5px;
  box-sizing:border-box;
  padding-left:5px;
}

1 个答案:

答案 0 :(得分:1)

要解决此问题,请在receiverNames方法中添加onDataChange() ArrayList的声明,否则它将为null。由于该方法的异步行为,这种情况正在发生。如果您想在该方法之外使用这些值,请参阅此post的答案。