gpt4 book ai didi

java - 从数据库中特定userid子节点读取值

转载 作者:行者123 更新时间:2023-12-01 19:56:48 25 4
gpt4 key购买 nike

我知道这个问题已经被问过 100 次了,但似乎没有一个解决方案适合我。

想要读取登录用户(userID)的“user_preferences”数据库并读取性别/年龄/体重/高度值并将它们存储在如下所示的变量中。目前,所有内容(日志语句和值)都返回 null。感觉好像我没有正确设置路径或其他什么。帮助会很棒!

db

和我的代码

       mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference();
userID = mAuth.getCurrentUser().getUid();
DatabaseReference testRef = myRef.child("user_preferences");


testRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {


for (DataSnapshot ds : dataSnapshot.getChildren()) { //loop through the firebase nodes

UserPreferences userPreferences = new UserPreferences();


userPreferences.setAge(ds.child(userID).getValue(UserPreferences.class).getAge());
userPreferences.setHeight(ds.child(userID).getValue(UserPreferences.class).getHeight());
userPreferences.setWeight(ds.child(userID).getValue(UserPreferences.class).getWeight());
userPreferences.setGender(ds.child(userID).getValue(UserPreferences.class).getGender());

genderSet = userPreferences.getGender();
age = userPreferences.getAge();
height = userPreferences.getHeight();
weight = userPreferences.getWeight();

Log.d(TAG, "onDataChange: " + genderSet);
//
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});


}

最佳答案

这两行代码:

DatabaseReference testRef = myRef.child("user_preferences");
testRef.addValueEventListener(...)

正在有效地查询名为user_preferences整个节点。这意味着该位置的所有内容 - 所有用户。听起来这不是你想要的。如果您只想查询单个用户,则应通过将所需的 userID 添加到查询位置来在查询中具体说明该用户:

DatabaseReference testRef = myRef.child("user_preferences").child(userID);
testRef.addValueEventListener(...)

此外,这些代码行让我感到困惑:

userPreferences.setAge(ds.child(userID).getValue(UserPreferences.class).getAge()); 
userPreferences.setHeight(ds.child(userID).getValue(UserPreferences.class).getHeight());
userPreferences.setWeight(ds.child(userID).getValue(UserPreferences.class).getWeight());
userPreferences.setGender(ds.child(userID).getValue(UserPreferences.class).getGender());

您正在为要填充的每个字段反序列化 UserPreferences 对象,这是浪费的。在我看来,你真的只想反序列化一次并记住该对象:

UserPreferences userPreferences = dataSnapshot.getValue(UserPreferences.class);

关于java - 从数据库中特定userid子节点读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373621/

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