我一直在用一块墙撞击墙壁约8小时,现在我很绝望,所以我希望有人能够让这些东西运转起来。请让那里有人。
从表面上讲,问题很简单。我有一个firebase数据库,如下所示:
AppName
- Profiles
- UID
- Name
我想要做的就是从数据库中获取所有UID和Name值并将它们配对。我已经尝试了我可以在网上找到的所有东西,但这开始看起来不可能,我不明白为什么。这是问题所在:
任何将数据从数据库中提取出来的尝试都是同步的。所以我可以获得用户的UID,没问题,但是我无法看到Name值,因为要获取名称值我需要UID值,并且在我请求Name值时,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,以便我可以实际使用它们来获取Names,但是我找不到任何可行的方法,所有内容总是同时被调用并且在名称调用时UID始终为空。
答案 0 :(得分:1)
试试这个:
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();
}
}
}
数据快照为Profiles
,然后使用for循环,它将在uid
的直接子项内迭代,您将能够使用以下内容获取uid:String key=datas.getKey();
名称使用String name=datas.child("name").getValue().toString();