java - 来自 Firestore 的数据未显示在 RecyclerView 中
问题描述
我遇到了一个问题,我的代码没有显示任何错误,但数据不会出现在 RecyclerView 中。每次我运行它时,它都会在 RecyclerView 部分显示为空白。我已将我的数据库规则设置为allow read, write: if true;
但仍然无法正常工作。
这是Java代码:
public class diary_user extends AppCompatActivity {
RecyclerView recyclerView;
Adapter adapter;
ImageView add;
DrawerLayout drawerLayout;
NavigationView navigationView;
Toolbar toolbar;
TextView date, note, time;
FirestoreRecyclerAdapter adapters;
FirebaseFirestore fStore;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_diary_user);
date = findViewById(R.id.date_text);
time = findViewById(R.id.time_text);
note = findViewById(R.id.note_textview);
recyclerView = findViewById(R.id.recycleView1);
fStore = FirebaseFirestore.getInstance();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
final String current = user.getUid();
Query query = fStore.collection("Diary").whereEqualTo("UID",current);
FirestoreRecyclerOptions<ModelClass> options = new FirestoreRecyclerOptions.Builder<ModelClass>()
.setQuery(query, ModelClass.class)
.build();
adapters = new FirestoreRecyclerAdapter<ModelClass, ModelViewHolder>(options) {
@NonNull
@Override
public ModelViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_diary, parent,
false);
return new ModelViewHolder(view);
}
@Override
protected void onBindViewHolder(@NonNull ModelViewHolder holder, int position, @NonNull
ModelClass model) {
holder.date.setText(model.getDate());
holder.note.setText(model.getText());
holder.time.setText(model.getTime());
holder.divider.setText(model.getDivider());
}
};
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapters);
}
private class ModelViewHolder extends RecyclerView.ViewHolder {
TextView date, time, note, divider;
public ModelViewHolder(@NonNull View itemView) {
super(itemView);
date = itemView.findViewById(R.id.date_text);
time = itemView.findViewById(R.id.time_text);
note = itemView.findViewById(R.id.note_textview);
divider = itemView.findViewById(R.id.line_textview);
}
}
@Override
protected void onStop() {
super.onStop();
if(adapters != null) {
adapters.stopListening();
}
}
@Override
protected void onStart() {
super.onStart();
if(adapters != null) {
adapters.startListening();
}
}
}
模型类代码:
public class ModelClass {
String date,time,text,divider;
ModelClass(String date,String time,String text,String divider){
this.date = date;
this.time = time;
this.text = text;
this.divider = divider;
}
public String getDate() {
return date;
}
public String getTime() {
return time;
}
public String getText() {
return text;
}
public String getDivider() {
return divider;
}
}
XML 代码:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:background="#ffffff">
<TextView
android:id="@+id/date_text"
android:layout_width="120dp"
android:layout_height="30dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="20dp"
android:text="16/3/2021"
android:textColor="#000000"
android:textSize="20sp" />
<TextView
android:id="@+id/time_text"
android:layout_width="80dp"
android:layout_height="30dp"
android:layout_marginLeft="290dp"
android:layout_marginTop="20dp"
android:text="1:30PM"
android:textSize="14sp" />
<TextView
android:id="@+id/note_textview"
android:layout_width="200dp"
android:layout_height="30dp"
android:layout_marginLeft="30dp"
android:layout_marginTop="55dp"
android:text="Feeling good today"
android:textSize="16sp" />
<TextView
android:id="@+id/line_textview"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_below="@+id/time_text"
android:layout_marginLeft="30dp"
android:layout_marginTop="25dp"
android:text="_____________________________________________"
android:textColor="#CDC7C7"
android:textSize="16sp" />
</RelativeLayout>
解决方案
添加adapters.startListening();
下面提到的这一行
adapters.startListening();
recyclerView.setHasFixedSize(true);
还要检查 Firestore 规则
allow read, write : if true;
还要检查数据收集字段名称和您的模型类变量名称,或者您可以检查您的 anotaion
@PropertyName("Date")
推荐阅读
- google-analytics - 将详细数据保存到谷歌分析
- google-sheets - 有没有办法根据标准或电子表格在 Google 幻灯片上更新图像?
- javascript - 使用 Twilio 的 API 的 Google 脚本正确运行但未返回正确的值
- python - 有没有一种有效的方法将 dask.array 的每一行(或列)乘以向量元素?
- kubernetes - 使用 externalTrafficPolicy: Local 在 GKE 上是否可以进行无中断滚动更新?
- javascript - URL 正则表达式未按预期验证
- javascript - 将逗号列表中的多个复选框选择发布到 Google 表格
- angular - 此类通过 SomeModule -> SomeComponent 对消费者可见,但不会从顶级库入口点导出
- latex - 乳胶侧身图匹配页面大小
- java - 打印表达式树