Android - преобразовать результат запроса Firebase в строку - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь сохранить результат запроса в строковой переменной, но в результате получаю преобразование строки объекта запроса.

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

Есть предложения?

РЕДАКТИРОВАТЬ: Структура базы данных:

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

Ответы [ 2 ]

1 голос
/ 14 января 2020

Чтобы извлечь данные из базы данных 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) {}
});
0 голосов
/ 14 января 2020

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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...