从Firebase数据库读取数据

时间:2016-09-30 21:49:08

标签: android firebase firebase-realtime-database

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

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

enter image description here

写入DB的方法

{{1}}

但它返回null ...任何帮助都将受到赞赏。

4 个答案:

答案 0 :(得分:13)

如果您想使用电话号码获取特定数据,则可以使用此类查询

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());
    }
});

我认为这是最好的方法。

答案 1 :(得分:2)

好的,我把它整理好了。问题中的上述代码完全正常,应该可行。 我正在为后来的用户解释,因为我犯了错误,可能会遇到同样的问题。

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
}

答案 2 :(得分:0)

<强>更新:

更新代码中的错误在此处。

myRef.setValue(data);

如果您要将数据添加为myRef.setValue(数据),那么您需要准确指定哪个孩子获取数据,或如果您想要更新所有孩子立刻然后你需要使用HashMap()和updateChildren()方法进行原子数据更新。

因此,对于特定的子更新,正确的方法是:

myRef.child("name").setValue(data);

我建议您阅读此official firebase blog以了解如何使用HashMap()一次性更新所有孩子

如果有任何改变,请告诉我。

答案 3 :(得分:0)

在给出你的firebase数据库的位置时,你应该总是在引号中使用那个文件夹名,使用 DatabaseReference myRef = database.child(&#34; profiles&#34;);

而不是 DatabaseReference myRef = database.child(&#34; profiles /&#34;);