用Java从Firebase数据库中获取数据

用Java从Firebase数据库中获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我已经连续8个小时用它把头撞在墙上了,现在我已经绝望了,所以我希望有人能设法让它工作起来。请让有人来 从表面上看,问题很简单。我有一个firebase数据库,如下所示: AppName - Profiles - UID - Name 我要做的就是从数据库中获取所有UID和Name值,并将它们配对。我已经尝试了所有我能在网上找到的东西,但这开始看起来不可能了,我不明白为什么。问题是: 任何从数据库中提取数据的尝试都是同时进行的。因此,我可以获取用户的UID,没有问

我已经连续8个小时用它把头撞在墙上了,现在我已经绝望了,所以我希望有人能设法让它工作起来。请让有人来

从表面上看,问题很简单。我有一个firebase数据库,如下所示:

 AppName
   - Profiles
     - UID
       - Name
我要做的就是从数据库中获取所有UID和Name值,并将它们配对。我已经尝试了所有我能在网上找到的东西,但这开始看起来不可能了,我不明白为什么。问题是:

任何从数据库中提取数据的尝试都是同时进行的。因此,我可以获取用户的UID,没有问题,但是我无法查看名称值,因为要获取名称值,我需要UID值,并且在请求名称值时,UID始终为空

下面是我用来获取数据的代码:

OnCreate() {
   LoadContactKeys();
   LoadContactNames();
}


private void LoadContactKeys() {
    DatabaseReference contactsList = FirebaseDatabase.getInstance().getReference("Profiles").child(ping_userID).child("Contacts");
    contactsList.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot dsp : dataSnapshot.getChildren()) {
                contactData[0][0] = String.valueOf(dsp.getKey());
                Toast.makeText(getBaseContext(), "contact: " + contactData[0][0], Toast.LENGTH_SHORT).show();
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}

private void LoadContactNames() {
    DatabaseReference contactsList = FirebaseDatabase.getInstance().getReference("Profiles").child(ping_userID).child("Contacts").child(contactData[0][0]).child("Name");
    contactsList.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot dsp : dataSnapshot.getChildren()) {
                contactData[1][0] = String.valueOf(dsp.getKey());
                Toast.makeText(getBaseContext(), "contact: " + contactData[1][0], Toast.LENGTH_SHORT).show();
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });
}
我已经尝试了几十种方法将其拆分,这样我就可以先填充UID,这样我就可以实际使用它们来获取名称,但我找不到任何方法可以做到这一点,所有内容总是在同一时间被调用,而UID在名称调用时总是为空。

尝试以下方法:

DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Profiles");
 ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot datas : dataSnapshot.getChildren()) {
            String key=datas.getKey();
            String name=datas.child("name").getValue().toString();
              }
        }
} 

datasnapshot是
Profiles
,然后使用for循环,它将在直接子对象(即
uid
)内迭代,您将能够使用以下方法获取uid:
String key=datas.getKey()和使用
String name=datas.child(“name”).getValue().toString()的名称

Wow man。。。就这么简单。我一直在扯头发。把你的票投给你,你这个光荣的人+1.