База данных Firebase в реальном времени не может запрашивать с целым числом - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть образец данных, как показано ниже

{
  "random_key 1" : {
    "id": 0,
    "text": "This is text"
  },
  "random_key 2" : {
    "id": 1,
    "text": "This is text"
  }
}

Я хочу запросить, чтобы получить узел с 'id', равным 1.

val database = FirebaseDatabase.getInstance().getReference()
database.orderByChild("id").equalTo(1)

Но этот код возвращает ошибку, потому что следуйте документу Google по этой ссылке: https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query

Библиотека поддерживает только Double, Boolean и String. Я действительно смущен сейчас. Как это возможно?

1 Ответ

2 голосов
/ 18 февраля 2020

Да, вы правы.

Библиотека поддерживает только Double, Boolean и String .

Также ваш query прав. В качестве огненной базы считают 1 double. Итак, ваш query должен работать. Проверьте ниже:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference();
Query query = databaseReference.orderByChild("id").equalTo(1);
query.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for(DataSnapshot childSnapshot: dataSnapshot.getChildren()) {

            String textValue = childSnapshot.child("text").getValue(String.class);

        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

Обновление для Kotlin: В Jave int в double автоматически конвертируется с помощью оператора присваивания, так как нижний тип может быть неявно преобразован в более высокий тип , Это также известно как неявное приведение типа или повышение типа .

Но в Kotlin нет ничего о неявном приведении типов. Вы должны сделать это самостоятельно, используя toDouble () . Проверьте ниже:

val databaseReference = FirebaseDatabase.getInstance().reference
val query = databaseReference.orderByChild("id").equalTo(1.toDouble())
query.addListenerForSingleValueEvent(object: ValueEventListener {
    override fun onCancelled(dataSnapshot: DatabaseError) {
        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
    }

    override fun onDataChange(dataSnapshot: DataSnapshot) {
        dataSnapshot.children.forEach { childSnapshot-> 

            val textValue = childSnapshot.child("text").getValue(String::class.java)
        }
    }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...