Firebase не может сохранить полученные данные в ArrayList - PullRequest
0 голосов
/ 29 мая 2018

Получение данных работает, но я не могу сохранить полученные данные в ArrayList.Сразу после "onDataChanged ()" метода ArrayList "профиль", кажется, имеет 2 значения, но в операторе возврата он имеет 0.

static List<Profile> profiles = new ArrayList<Profile>();
static DatabaseReference dbr;

public static List<Profile> loadProfiles(Context context){

    dbr = FirebaseDatabase.getInstance().getReference().child("users").child("hiring");
    dbr.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // This method is called once with the initial value and again
            // whenever data at this location is updated.
            //String value = dataSnapshot.getValue(String.class);
            //Log.d("hello", "Value is: " + value);
            List<Profile> profiles2 = new ArrayList<>();

                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    Profile profile = snapshot.getValue(Profile.class);
                    //Log.d("hello", profile.getCompanyName());
                    profiles2.add(profile);

                }

                profiles = profiles2;
                dbr.removeEventListener(this);
        }




        @Override
        public void onCancelled(DatabaseError error) {
            // Failed to read value
            Log.w("hello", "Failed to read value.", error.toException());
        }
    });

    return profiles;

}

1 Ответ

0 голосов
/ 29 мая 2018

Вы не можете вернуть то, что еще не было загружено.Другими словами, вы не можете просто вернуть список profiles вне метода onDataChange(), потому что он всегда будет empty из-за асинхронного поведения этого метода.Это означает, что к тому времени, когда вы пытаетесь вернуть этот результат за пределы этого метода, данные еще не закончили загрузку из базы данных, и поэтому они недоступны.

Быстрое решение этой проблемы -используйте список profiles только внутри метода onDataChange(), в противном случае я рекомендую вам увидеть последнюю часть моего ответа из этого поста , в котором я объяснил, как это можно сделатьиспользуя пользовательский обратный вызов.Вы также можете взглянуть на это видео для лучшего понимания.

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