首页 > 解决方案 > 从 Firebase 读取数据没有设置器字段错误 Firebase

问题描述

您好,我正在尝试从当前登录用户的所有笔记中检索数据。

但是我不断收到这个错误,我不知道如何解决这个问题。我正在使用 Viewholder recyclerView。我还有 2 个 xml 文件,1 个用于视图,一个用于 cardview 布局。但是我知道问题出在我的代码部分,我错过了读出数据的地方。我看到了一个教程,我们做了同样的事情,他还创建了带有用户 ID 的帖子并像这样读出它们

下面列出的错误:

W/ClassMapper: No setter/field for -LxFfo5HuRPQsBUSiFuc found on class com.example.examapplikation.Models.NotesList

No setter/field for -LxFfqThHtNWsk9bD5Zb found on class com.example.examapplikation.Models.NotesList

No setter/field for -LxI2a7Osg8WYK1E5VJ4 found on class com.example.examapplikation.Models.NotesList

这些是我帖子的IDS:

我的主要活动

enter code here

 private RecyclerView recyclerView; //https://camposha.info/android-firebase-realtime-database-with-recyclerview/
    private FloatingActionButton addNotePageButton;
    private FirebaseAuth firebaseAuth;
    FirebaseDatabase database;
    DatabaseReference todoDb;

    FirebaseRecyclerOptions<NotesList> options;
    FirebaseRecyclerAdapter<NotesList, NoteViewHolder> adapter;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        recyclerView = findViewById(R.id.recyclerView);
        addNotePageButton = findViewById(R.id.fab_button_addPage);
        firebaseAuth = FirebaseAuth.getInstance(); // get inSTACE
        database = FirebaseDatabase.getInstance();
        todoDb = database.getReference("NoteList");
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager( new LinearLayoutManager(this) );
        showTask();



        addNotePageButton.setOnClickListener(new View.OnClickListener() { //  Float button click
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(HomeActivity.this, NoteInputActivity.class);
                startActivity(intent);
            }
        });

    }


    @Override
    protected void onStart() {
        super.onStart();
        adapter.startListening();
    }

    @Override
    protected void onStop() {
        super.onStop();
        adapter.stopListening();
    }


    private void showTask(){
       options = new FirebaseRecyclerOptions.Builder<NotesList>()
               .setQuery(todoDb,NotesList.class)
               .build();

       adapter = new FirebaseRecyclerAdapter<NotesList, NoteViewHolder>(options) {
           @Override
           protected void onBindViewHolder(@NonNull NoteViewHolder holder, int position, @NonNull NotesList model) {
               holder.text_title.setText(model.getText());
               holder.text_content.setText(model.getText());

           }

           @NonNull
           @Override
           public NoteViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

               View itemView  = LayoutInflater.from(viewGroup.getContext())
                       .inflate(R.layout.notes_each_row,viewGroup,false);


               return new NoteViewHolder(itemView);
           }
       };

       recyclerView.setAdapter(adapter);




}

这是我的模型课:

enter code here

public class NotesList {

    private String title;
    private String text;

    public NotesList(){

    }

    public NotesList(String title, String text){

        this.title=title;
        this.text= text;

    }

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }
}

这是我的 ViewHolder 的代码:

enter code here

public class NoteViewHolder extends RecyclerView.ViewHolder {

    public TextView text_title, text_content;

    public NoteViewHolder(@NonNull View itemView){

        super (itemView);

        text_title = itemView.findViewById(R.id.text_title);
        text_content = itemView.findViewById(R.id.text_content);


    }

 }

数据库结构图片: 在此处输入图片描述

标签: javaandroidfirebasefirebase-realtime-database

解决方案


您必须在查询中再上一层才能获得NotesList. 更改您的查询,如下所示:

todoDb = database.getReference("NoteList").child("6Dp...Py1");

如果6Dp...Py1是您当前用户的UID然后使用

todoDb = database.getReference("NoteList").child(firebaseAuth.getCurrentUser().getUid());

推荐阅读