我正在尝试将查询结果存储在String变量中,但是我得到的结果是查询对象的字符串转换。
tableDatabaseReference = FirebaseDatabase.getInstance().getReference("tables");
tableNameQuery = tableDatabaseReference.child("tableName").orderByChild(tableID).equalTo("123");
String tableName = tableNameQuery.toString();
有什么建议吗?
编辑: 数据库结构:
Tables:
-------TableID:
--------------TableName:
--------------TableID:
答案 0 :(得分:1)
要从Firebase Realtime数据库检索数据,必须将valueEventListener添加到这样的数据库引用变量中
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference dataRef = database.getReference("YOUR_DATABASE_REF");
dataRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// here you can get your data from this snapshot object
String data = dataSnapshot.getValue("CHILD_NAME_HERE").toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
要获取数据,则可以使用singleValueEventListener
dataRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// here you can get your data from this snapshot object
String data = dataSnapshot.getValue("CHILD_NAME_HERE").toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
答案 1 :(得分:0)
Firebase 操作是异步,因此您必须等待完成操作才能获得结果。要访问onDataChange
之外的数据,您可以使用LiveData
并在外面观察数据。当您在onDataChange
中获取数据时,请通过发布值通知LiveData
。检查以下内容:
private MutableLiveData<String> tableName = new MutableLiveData<>();
DatabaseReference tableDatabaseReference = FirebaseDatabase.getInstance().getReference("tables");
tableDatabaseReference
.child(tableID)
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String data = dataSnapshot.child("tableName").getValue(String.class);
//Now post that value to LiveData
tableName.postValue(data);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
在此处观察数据
tableName.observe(this, name -> {
// use name here
});