为了账号安全,请及时绑定邮箱和手机立即绑定

Android/Firebase - 如何将检索到的数据添加到 ArrayList

Android/Firebase - 如何将检索到的数据添加到 ArrayList

波斯汪 2021-10-20 11:07:54
我在尝试这样做时遇到了一些问题,因为数据是异步加载的。我有一个 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);            }我希望代码在这里“停止”,并且仅在数据完全加载到我的数组中后才继续执行,就像某种回调一样。
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

您可以使用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()方法。如果你想在外面使用它,我建议你从这篇文章中查看我的 anwser 的最后一部分,其中我解释了如何使用自定义回调来完成它。您也可以观看此视频以更好地理解。


查看完整回答
反对 回复 2021-10-20
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

您可以使用 onDataChange 方法将获取的结果添加到数组列表中


ref.addValueEventListener(new ValueEventListener() {

@Override

public void onDataChange(DataSnapshot dataSnapshot) {

    for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {

        Question question = ds.getValue(Question.class);

        arrayList.add(question.title);

    }

}

});

然后您可以轻松地在回收站视图中显示它们。


查看完整回答
反对 回复 2021-10-20
  • 3 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信