首页 > 解决方案 > Android/Firebase - 如何将检索到的数据添加到 ArrayList

问题描述

我在尝试这样做时遇到了一些问题,因为数据是异步加载的。

我有一个 recyclerView,我需要将数据推送到一个列表中,以便可以在屏幕上显示信息进行回收,但事实证明这样做有点困难。

这就是我到目前为止得到的:

refQuestions.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Question question = dataSnapshot.getValue(Question.class);
                arrayList.add(question.title);
                Log.d("MyApp", question.title);
            }

我希望代码在这里有点“停止”,并且只有在数据完全加载到我的数组中之后才继续执行,就像某种回调一样。

标签: javaandroidfirebase-realtime-database

解决方案


您可以使用addChildEventListener或者您可以使用addListenerForSingleValueEvent,如下面的代码所示:

ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> arrayList = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Question question = ds.getValue(Question.class);
            arrayList.add(question.title);
        }

        //Do what you need to do with your arrayList
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
refQuestions.addListenerForSingleValueEvent(valueEventListener);

如您所见,此问题的快速解决方法是使用arrayListonly insideonDataChange()方法。如果你想在外面使用它,我建议你从这篇文章中查看我的答案的最后一部分,我在其中解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。


推荐阅读