从Firebase数据库读取数据

Has*_*azi 9 android firebase firebase-realtime-database

我想从firebase数据库中读取特定数据.我目前正在做的是这里.

DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference myRef = database.child("profiles/");

myRef.child(phoneNo).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        user = dataSnapshot.getValue(User.class);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}

});
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

写入DB的方法

public void writeToDBProfiles(Object data,String phoneNo) {
    DatabaseReference database = FirebaseDatabase.getInstance().getReference();
    DatabaseReference myRef = database.child("profiles/" + phoneNo);
    myRef.setValue(data);
}
Run Code Online (Sandbox Code Playgroud)

但它返回null ...任何帮助将不胜感激.

Ind*_*ile 14

如果您想使用电话号码获取特定数据,那么您可以使用这样的查询

DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = database.child("profiles");

Query phoneQuery = ref.orderByChild(phoneNo).equalTo("+923336091371");
phoneQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot singleSnapshot : dataSnapshot.getChildren()){
           user = singleSnapshot.getValue(User.class); 
        }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e(TAG, "onCancelled", databaseError.toException());
    }
});
Run Code Online (Sandbox Code Playgroud)

我认为这是最好的方法.


Has*_*azi 4

好的,我已经解决了。问题中的上述代码非常好并且应该可以工作。我正在向后来的用户解释,因为我犯的错误可能会遇到同样的问题。

singleSnapshot.getValue(User.class); 无法将结果转换为用户类,因为在上传数据时,即在 setValue 中,我的 photoUrl 等于 null,因此您可以看到 photoUrl 不存在于我的子节点中。所以我相信(也许有人想纠正我)我的 singleSnapshot.getValue 方法无法转换结果。

因此,目前我已从 User 类中省略了 photoUrl,当我开始使用相关模块时,我将再次使用它。

再次感谢大家的所有建议和帮助。

public class User {
String name;
Uri photoURL;
String bloodGroup;
String city;
String country;
double latitude;
double longitude;
boolean availableToDonate;

// Get, set and constructors are obvious here I am just saving some space in the post
}
Run Code Online (Sandbox Code Playgroud)