我有一个 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();
如果您使用最后一个 Toast 来确定列表的大小,则您得到的始终为 0,因为您清除了列表并且读取数据库是异步的,因此对象将在显示 Toast 后添加。
尝试在 onSuccess 方法内、for 循环之后显示 Toast,或打印到 logcat。