Я использую базу данных ref внутри цикла for, но он не получает данные? - PullRequest
0 голосов
/ 16 июня 2019

Вот моя функция:

private void getOrderID() {

    for (int i = 0; i < userID.size(); i++) {
        databaseReference.child(opearatorID).child(userID.get(i)).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    keyStatusRelation.put(childSnapshot.getKey(),childSnapshot.getValue(Order.class).getStatus());
                }
                loadData();

            }

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

            }
        });

    }

}

Эта функция получает ошибку, потому что данные не загружаются в базу данных

 public static void loadData() {

    for (int i=0;i<userID.size();i++){
        statusRefrenceLiving.child(userID.get(i)).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    Order order = childSnapshot.getValue(Order.class);
                    if(keyStatusRelation.get(childSnapshot.getKey()).equals("0")||keyStatusRelation.get(childSnapshot.getKey()).equals("2")){
                        bookingmList.add(order);
                        bookingrecyclerView.setAdapter(bookingAdapter);

                    }
                    if(keyStatusRelation.get(childSnapshot.getKey()).equals("1")){
                        bookedmList.add(order);
                        bookedrecycleView.setAdapter(bookedAdapter);

                    }
                    if(keyStatusRelation.get(childSnapshot.getKey()).equals("3")){
                        LivingmList.add(order);
                        LivingrecycleView.setAdapter(livingAdapter);

                    }

                }

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

            }
        });

    }

}

Вот logcat

Процесс: com..teepe.teepestaysmasterapp.MainActivity $ 4.onDataChange (MainActivity.java:187) на com.google.firebase.database.core.ValueEventRegistration.fireEvent (com.google.firebase: firebase-database @@ 17.0.0: 75) на com.google.firebase.database.core.view.DataEvent.fire (com.google.firebase: firebase-database @@ 17.0.0: 63) на com.google.firebase.database.core.view.EventRaiser $ 1.run (com.google.firebase: firebase-database @@ 17.0.0: 55) на android.os.Handler.handleCallback (Handler.java:751) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:154) в android.app.ActivityThread.main (ActivityThread.java:6077) at java.lang.reflect.Method.invoke (собственный метод) на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:866) на com.android.internal.os.ZygoteInit.main (ZygoteInit.java: 756)

Он зацикливается и идет только на вторую строку и не входит в onDataChange, кто-нибудь может сказать мне, в чем проблема?

1 Ответ

0 голосов
/ 16 июня 2019

Данные загружаются из Firebase асинхронно.Это означает, что ваш основной код продолжается, пока данные загружаются.И затем, когда данные становятся доступны, вам звонят onDataChange.

Это означает, что вы не можете войти в onDataChange с помощью отладчика, потому что данные еще не доступны.Если вы хотите увидеть, что происходит в onDataChange в отладчике, поставьте точку останова в первой строке метода и дайте отладчику продолжить.Как только данные станут доступны, будет вызван onDataChange и точка останова достигнет.

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