首页 > 解决方案 > 来自 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>

这是数据库结构: 数据库结构

标签: javaandroidfirebasegoogle-cloud-firestoreandroid-recyclerview

解决方案


添加adapters.startListening();下面提到的这一行

adapters.startListening();
recyclerView.setHasFixedSize(true);

还要检查 Firestore 规则

allow read, write : if true;

还要检查数据收集字段名称和您的模型类变量名称,或者您可以检查您的 anotaion

@PropertyName("Date")

推荐阅读