Android: как петля через Firebase Datasnapshot и хранить ключи в списке класса уровня массива?

Я очень новичок в Java, поэтому заранее приношу извинения, если это супер прямо вперед.

Я привязываюсь к циклу через мою базу данных Firebase и храню набор ключей каждого ребенка в ArrayList.

Вот краткая версия кода:

public class MainActivity extends AppCompatActivity {

private DatabaseReference mRefEvents;
private List<String> newArray;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mRefEvents = FirebaseDatabase.getInstance().getReferenceFromUrl("https:***");
    newArray = new ArrayList<String>();


    mRefEvents.addValueEventListener(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            for (DataSnapshot child : dataSnapshot.getChildren())
            {
                for (DataSnapshot grandChild : child.getChildren())
                {
                    newArray.add(grandChild.getKey());
                }
            }
            Log.i("App info middle", newArray.toString());
        }

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

    Log.i("App info end", newArray.toString());
}
}

Когда я регистрирую («App info middle») newArray в addValueEventListenerметоде, я получаю именно те значения, которые мне нужны. Однако второй журнал («App info end») внизу, дает мне пустой массив и не хранит ключи в ArrayList newArray.

Я уверен, что я упускаю что-то простое, но любые предложения были бы высоко оценены. Спасибо!

1 ответ

  1. Это выглядит так, как вы работаете все на одном дыхании. Поскольку прослушиватель работает асинхронно, я представляю, что вы нажимаете журнал в нижней части «App Info End», прежде чем вы нажимаете журнал в слушателе «App Info Middle». Попробуйте запустить «App info End» другим способом или после нажатия кнопки, и вы увидите, что массив заполнен. Сказав Все это, можете ли вы опубликовать свой вывод на консоль, чтобы мы могли подтвердить, что конец информации о приложении попадает до середины информации о приложении?