按钮 onclicklistener 中的 ArrayList.clear() 问题将 firebase firestore 数据库读取到数组列表中

问题描述 投票:0回答:1

我有一个 firebase firestore 数据库。每次我用 onclicklistener 单击按钮时,我都会将此数据库读入数组列表。但是,每次单击此按钮时,我都需要根据数据库中的更改重新读取此数据库。另外,在读取数据库之前,我需要清除每次读取数据库的数组列表。但是,当我在 android studio java 中使用 arraylist.clear() 命令时,我无法再将任何对象添加到 arraylist 中。当我检查数组列表的大小时,它总是显示为零。我需要知道这个问题的原因以及如何解决这个问题?我将用户定义类的对象添加到数组列表中。下面是我的用户定义类的代码以及导致此问题的代码片段。

package com.example.myapplication;

import com.google.firebase.firestore.Exclude;

import java.io.Serializable;


public class Courses implements Serializable {

    
    public String getId() {
        return id;
    }

    
    public void setId(String id) {
        this.id = id;
    }

    
    @Exclude
    private String id;

    
    private String courseName, courseDescription, courseDuration;

    public Courses() {
        
    }

    
    public Courses(String courseName, String courseDescription, String courseDuration) {
        this.courseName = courseName;
        this.courseDescription = courseDescription;
        this.courseDuration = courseDuration;
    }

   
    public String getCourseName() {
        return courseName;
    }

    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }

    public String getCourseDescription() {
        return courseDescription;
    }

    
    public void setCourseDescription(String courseDescription) {
        this.courseDescription = courseDescription;
    }

    public String getCourseDuration() {
        return courseDuration;
    }

    public void setCourseDuration(String courseDuration) {
        this.courseDuration = courseDuration;
    }
} 

 

Btn121.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                

                coursesArrayList21.clear();
               

                db2.collection("Courses").get()
                        .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                            @Override
                            public void onSuccess(QuerySnapshot queryDocumentSnapshots){
                                
                                if (!queryDocumentSnapshots.isEmpty()) {
                                    

                                    List<DocumentSnapshot> list = queryDocumentSnapshots.getDocuments();
                                    for (DocumentSnapshot d : list) {
                                        
                                        Courses c = d.toObject(Courses.class);
                                        
                                        coursesArrayList21.add(c);
                                    }
                                    

                                } else {
                                    
                                    Toast.makeText(MainActivity2.this, "No data found in Database", Toast.LENGTH_SHORT).show();
                                }
                            }
                        }).addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                
                                
                                Toast.makeText(MainActivity2.this, "Fail to get the data.", Toast.LENGTH_SHORT).show();
                            }
                        });

                dummy1234 = coursesArrayList21.size();
                Toast.makeText(MainActivity2.this,Integer.toString(dummy1234), Toast.LENGTH_SHORT).show();




 
java android firebase google-cloud-firestore arraylist
1个回答
0
投票

如果您使用最后一个 Toast 来确定列表的大小,则您得到的始终为 0,因为您清除了列表并且读取数据库是异步的,因此对象将在显示 Toast 后添加。

尝试在 onSuccess 方法内、for 循环之后显示 Toast,或打印到 logcat。

© www.soinside.com 2019 - 2024. All rights reserved.