【发布时间】:2020-05-01 20:33:22
【问题描述】:
我的代码有问题。我整天都在尝试解决此代码,但我不能,我不知道该怎么做。问题是 onDataChange() 返回重复值。我试图添加这一行“addListenerForSingleValueEvent()”,并通过编写“FirebaseDatabase.getInstance().setPersistenceEnabled(false);”来禁用 Firebase 的离线持久性。但它没有用。我最终得到重复值(见下图)。 Duplicates values
我从 Firebase 检索数据的代码是:
@Override
public void onStart() {
super.onStart();
options = new FirebaseRecyclerOptions.Builder<Course>().setQuery(reference, Course.class).build();
adapter = new FirebaseRecyclerAdapter<Course, CourseViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull final CourseViewHolder courseViewHolder, int i, @NonNull Course course) {
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
String course_name = ds.child("Course name").getValue().toString();
courseViewHolder.courseRealName.setText(course_name);
Log.d(TAG, course_name);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@NonNull
@Override
public CourseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.create_course_view,parent, false);
CourseViewHolder viewHolder = new CourseViewHolder(v);
return viewHolder;
}
};
adapter.startListening();
recyclerView.setAdapter(adapter);
}
回收站查看代码
@NonNull
@Override
public CourseViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.create_course_view,parent, false);
CourseViewHolder viewHolder = new CourseViewHolder(v);
return viewHolder;
}
};
adapter.startListening();
recyclerView.setAdapter(adapter);
}
public static class CourseViewHolder extends RecyclerView.ViewHolder{
TextView courseName, courseRealName,numberOfStudent, realNumberOfStudents;
public CourseViewHolder(@NonNull View itemView) {
super(itemView);
courseName = itemView.findViewById(R.id.denCursList);
courseRealName = itemView.findViewById(R.id.realCourseName);
numberOfStudent = itemView.findViewById(R.id.numarStudentiInfo);
realNumberOfStudents = itemView.findViewById(R.id.numarRealStudenti);
}
}
我正在等待回复。谢谢!
【问题讨论】:
-
使用
course对象作为数据源,而不是实现reference.addListenerForSingleValueEvent -
我试过了,但它在 RecyclerView 上什么也没返回
-
那么问题出在您使用
adapter的查询设置中 -
添加数据库截图,添加数据库引用的代码,以及设置recyclerview的代码。
-
@HasanBouTaam 我已经用我的 Firebase 数据库上传了一个屏幕截图。
标签: java android firebase firebase-realtime-database