我正在编写一个Android应用程序,我需要从之前手动添加的Firebase数据库中检索值。存储在Firebase数据库中的数据不对称,这就是我无法使用类对象的原因。
我想做类似于以下代码的事情。
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseRef;
firebaseDatabase = FirebaseDatabase.getInstance();
databaseRef= firebaseDatabase.getReference().child("child").child("child2");
String value = databaseRef.getValue("key");
//In above line I want to retrieve string at child → child2 → key:"value"
答案 0 :(得分:2)
虽然建议您不必 使用自定义Java类来获取Firebase中的值。您也可以直接阅读原始类型,如下所示。但无论您使用的是自定义类还是原始类型,您都必须use a listener to read data from the database:
FirebaseDatabase firebaseDatabase;
DatabaseReference databaseRef;
firebaseDatabase = FirebaseDatabase.getInstance();
databaseRef= firebaseDatabase.getReference().child("child").child("child2");
databaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "listener canceled", databaseError.toException());
}
};
您可以通过这种方式将监听器附加到JSON树中的任何级别,Firebase会将该点下的所有数据同步到DataSnapshot
。然后,您可以使用getChild()
和getValue()
方法从快照中获取它。例如,阅读child
下的所有内容,但只打印child2
:
databaseRef= firebaseDatabase.getReference().child("child");
databaseRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getChild("child2").getValue(String.class);
Log.i(TAG, "child2: "+value);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.w(TAG, "listener canceled", databaseError.toException());
}
};
第二个代码段从数据库中读取更多数据,但只从快照中提取child2
。
答案 1 :(得分:1)
您需要设置ValueEventListener并获取Firebase文档中所写的数据快照
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
Post post = dataSnapshot.getValue(Post.class);
// ...
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// ...
}
};
mPostReference.addValueEventListener(postListener);