Android-将Firebase查询结果转换为字符串

时间:2020-01-14 06:02:23

标签: android firebase firebase-realtime-database

我正在尝试将查询结果存储在String变量中,但是我得到的结果是查询对象的字符串转换。

tableDatabaseReference = FirebaseDatabase.getInstance().getReference("tables");
tableNameQuery = tableDatabaseReference.child("tableName").orderByChild(tableID).equalTo("123");
String tableName = tableNameQuery.toString();

有什么建议吗?

编辑: 数据库结构:

Tables: -------TableID: --------------TableName: --------------TableID:

2 个答案:

答案 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
});