在前循环中无法添加到数组列表

时间:2019-08-29 09:57:36

标签: java android android-recyclerview google-cloud-firestore

我想将数据添加到For-Loop内的ArrayList中,这是行不通的。

我在Firebase中有一个Cloud Firestore,其中有一个由另一个应用程序填充的文档集合。这是为了获取数据并将其放入Recycler View。适配器和所有设置。据我所知,问题在于在For-Loop中填充了(Array)list吗? (因为仅填充此循环中的任何数据都行不通,但我不确定。) 我使用注释记录了代码中的一些尝试和错误。我敢肯定,这肯定只是一些小错误,但我确实找不到。 用完全相同的代码在For-Loop外部添加数据有效,在内部无效(请参阅“ Blah”)

private ArrayList<String> patients;

private String testString;
//-> String einzig zu Testzwecken

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

    patients = new ArrayList<>();

    textView = findViewById(R.id.textView);

    db.collection("Test")
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        for (QueryDocumentSnapshot document : task.getResult()) {

                            //patients = new ArrayList<>();
                            //-> doesn't work

                            patients.add((document.getData().toString()));
                            //doesn't work

                            listData.add(new Data(R.drawable.hohlbrot, "ahjotest"));
                            //doesn't work (trying to feed the recyclerView more directly)

                            //Toast.makeText(MainActivity.this, document.getData().toString(), Toast.LENGTH_SHORT).show();
                            //textView.setText(document.getData().toString());

                                // -> both work
                            testString = testString + document.getData().toString();
                            textView.setText(testString);
                                // -> works
                            patients.add("Blah1");
                            //doesn't work

                            //Log.d(TAG, document.getId() + " => " + document.getData());
                        }
                    } else {
                        //Log.d(TAG, "Error getting documents: ", task.getException());
                        patients.add("BlahError");
                    }
                }
            });


    patients.add("Blah2");
      //works

好吧,我尝试了几种方法,但是有了我希望可以进行的设置,没有错误消息。它只是什么也没做。在RecyclerView中,“ Blah2”的出现与以后添加的任何字符串一样。只要不使用ArrayList,我在For-Loop中尝试的所有操作(Toast,String-to-TextView等)都可以正常工作。

PS:我是Noob,请耐心等待-.-

2 个答案:

答案 0 :(得分:0)

如果使用Firebase,请尝试在OnSuccessListener中运行for循环。

语法与此类似:

firebaseFirestore.collection("some collection").get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot documentSnapshots) {
                     //do your work here
            })

答案 1 :(得分:0)

我无法使用提到的解决方案/方法来运行它,但我会在本教程之后对其进行重建: https://www.youtube.com/watch?time_continue=2&v=ub6mNHWGVHw&feature=emb_title

->因此,请使用Firestore RecyclerView(而不是普通的RecyclerView)和给定的设置(不涉及循环)。