问题描述: 我在Android Studio中使用Firestore和RecyclerView来显示数据,但是RecyclerView不显示任何数据,而且还报错。 以下是我的代码示例:
MainActivity.java:
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private FirestoreAdapter mFirestoreAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference collectionRef = db.collection("items");
Query query = collectionRef.orderBy("timestamp", Query.Direction.DESCENDING);
FirestoreRecyclerOptions- options = new FirestoreRecyclerOptions.Builder
- ()
.setQuery(query, Item.class)
.build();
mFirestoreAdapter = new FirestoreAdapter(options);
mRecyclerView.setAdapter(mFirestoreAdapter);
}
@Override
protected void onStart() {
super.onStart();
mFirestoreAdapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
mFirestoreAdapter.stopListening();
}
}
FirestoreAdapter.java:
public class FirestoreAdapter extends FirestoreRecyclerAdapter- {
public FirestoreAdapter(@NonNull FirestoreRecyclerOptions
- options) {
super(options);
}
@Override
protected void onBindViewHolder(@NonNull ItemViewHolder holder, int position, @NonNull Item model) {
holder.bind(model);
}
@NonNull
@Override
public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false);
return new ItemViewHolder(view);
}
public static class ItemViewHolder extends RecyclerView.ViewHolder {
private TextView mTitleTextView;
public ItemViewHolder(@NonNull View itemView) {
super(itemView);
mTitleTextView = itemView.findViewById(R.id.title_text_view);
}
public void bind(Item item) {
mTitleTextView.setText(item.getTitle());
}
}
}
Item.java:
public class Item {
private String title;
public Item() {}
public Item(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
}
activity_main.xml:
item_layout.xml:
解决方法:
确保您已经在Firebase控制台中正确设置了Firestore,并且已经添加了适当的规则来允许读取数据。
检查您的Firestore数据库中是否有名为"items"的集合,并且该集合中是否有数据。如果没有数据,RecyclerView将不会显示任何内容。
确保您的FirestoreAdapter类继承自FirestoreRecyclerAdapter,并且已正确实现了onBindViewHolder和onCreateViewHolder方法。
检查item_layout.xml文件中的TextView的属性是否正确设置。确保布局文件中的TextView的id为"title_text_view"。
确保您的Item类中的字段与Firestore数据库中的字段名称相匹配。如果Firestore数据库中的字段名与Item类中的字段名不匹配,RecyclerView将无法正确显示数据。
确保您的FirestoreAdapter类已正确设置FirestoreRecyclerOptions,并将其传递给父类的构造函数。
检查您的Firestore数据库中的"timestamp"字段是否存在,并确保已正确