Android Как разрешить загрузку данных из базы данных Firebase в сочетании с orderByChild () & startAt () & limitToFirst ()? - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу отсортировать данные из Firebase RealTimeDatabase.То, что я пытаюсь сделать, это когда я сначала загружаю данные, они будут начинаться с дочернего значения, которое я поместил внутри, например, «7», затем сортируют базу данных по дочернему значению «NUMBER» в возрастающей последовательности и limitToFirst (2) данные.Но журнал всегда показывает, что dataSnapshot не существует.

Вот мой код

Код для загрузки данных

private void testData(){
        final ArrayList<FirebaseDatabaseGetSet> testArrayList;
        testArrayList = new ArrayList<>();
        databaseReference = firebaseDatabase.getReference();
        databaseReference.child("VTEST").orderByChild("NUMBER").startAt("7").limitToFirst(2).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()){

                    Log.d("MOSTPOPCURRENTLASTNODE", "LOAINGMOREDATA");
                    for (DataSnapshot DS:dataSnapshot.getChildren()){
                        FirebaseDatabaseGetSet getSet = DS.getValue(FirebaseDatabaseGetSet.class);
                        testArrayList.add(getSet);
                    }
                    Log.d("MOSTPOPCURRENTLASTNODE", String.valueOf(testArrayList.get(0).getNUMBER()));
                    Log.d("MOSTPOPCURRENTLASTNODE", String.valueOf(testArrayList.get(1).getNUMBER()));

                }else {
                    Log.d("MOSTPOPCURRENTLASTNODE", "NOLOAINGMOREDATA");
                }
            }

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

            }
        });
    }

и вотмоя структура данных Firebase

структура данных

"VTEST" : {
"A" : {
  "NUMBER" : 5
},
"B" : {
  "NUMBER" : 3
},
"C" : {
  "NUMBER" : 7
},
"D" : {
  "NUMBER" : 10
},
"E" : {
  "NUMBER" : 12
},
"F" : {
  "NUMBER" : 8
}

}

Что я ожидаю от журнала, это "7" и "8", ноон всегда показывает, что dataSnapshot не существует.Может кто-нибудь сказать мне, что я делаю здесь не так, я уже пытался найти другие подобные вопросы, но не смог найти никакого решения для этого.

Ответы [ 2 ]

1 голос
/ 15 апреля 2019

Вы фильтруете по:

databaseReference.child("VTEST").orderByChild("NUMBER").startAt("7")

И сохраняете:

"NUMBER" : 7

Если вы посмотрите внимательно, вы увидите, что один является строкой, а другойявляется целым числомА в базе данных Firebase Realtime значения разных типов никогда не равны.

Чтобы устранить проблему, отфильтруйте по числовому значению:

databaseReference.child("VTEST").orderByChild("NUMBER").startAt(7)
0 голосов
/ 15 апреля 2019

попробуйте это, я получаю данные таким образом, сокращая его дочерний: -

mChatReference = FirebaseDatabase.getInstance().getReference(VTEST)
                .child("user id");
        Query query = mChatReference.orderByChild("NUMBER");
        query.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                yourList.add(snapshot.child("NUMBER").getValue());
            }
            }

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

            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...