gpt4 book ai didi

android - getKey() 返回值而不是 ID

转载 作者:行者123 更新时间:2023-11-29 19:26:09 24 4
gpt4 key购买 nike

我正在尝试获取 Firebase 数据库中特定 child 的 ID。数据库看起来像这样:

Users:

- id: user1
- id: user2
- ...

现在我想返回每个用户的ID,我用这个试过了;

DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference();
ValueEventListener users = databaseRef.child("Users").child(bundle.getString("User")).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

String userID = dataSnapshot.getKey();


mTextView.setText(userID);
}

@Override
public void onCancelled(DatabaseError databaseError) {
//error
}
});

bundle.getString("User") 是一个字符串,其中包含我想从中获取 ID 的用户的值。

当我打开应用程序时,mTextView 中的文本只包含用户名而不是 ID。

我做错了什么?

该应用程序是包含所有用户的主 Activity 中的 ListView。当用户单击列表项时,将打开一个新 Activity 。在此 Activity 中,我想显示所选用户的信息,但为此我想获取 ID 以在数据库中找到具有相同 ID 的相应信息。

JSON:

{
"Users" : [ null, "Jef", "Peter", "Jean", "Ronny" ]
}

最佳答案

本文推荐您阅读Best Practices: Arrays in Firebase

arrays are quite handy. But for distributed data, they aren't reliable because they lack a unique, permanent way to access each record.

这意味着您无法检索Users 下的数组的每个索引。 .您可以先检索整个数组 ( databaseRef.child("Users").addValueEventListener() ),将返回的 dataSnapshot 转换为数组,然后手动检查值或使用 contains方法。

我的建议是将您的数据库结构更改为这样

{
"Users" : {
"Jef" : true,
"Peter" : true,
"Jean" : true,
"Ronny" : true
}
}

有了这个数据库结构,您不需要更改代码,因为它应该已经可以工作了。

编辑:对于您的情况,您可以将其他用户详细信息保存在数据库的其他节点中

{
"Users" : {
"Jef" : true,
"Peter" : true,
"Jean" : true,
"Ronny" : true
},
"Users_details" : {
"Jef" : {
"city" : "some_city_name",
"address" : "some_address_name",
"phone_number" : "some_phone_number"
},
"Peter" : {
"city" : "some_city_name",
"address" : "some_address_name",
"phone_number" : "some_phone_number"
},
"Jean" : {
...
},
...
}
}
  • 要获取用户名列表,您只需要收听Users即可。节点
  • 然后,当单击 ListView 中的 View 时,将用户名作为额外的 Intent 发送到其他 Activity intent.putExtra("username", username);
  • 最后,在新 Activity 中,收听 Users_details/<username_from_intent>获取用户详细信息(电话号码、地址等)

希望这对您有所帮助,这种结构绝对比将每个细节都保存在一个数组中要好。如果您阅读了我提供的第一个链接,则应避免这种做法,因为您可能会更改用户详细信息。

关于android - getKey() 返回值而不是 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41359702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com