繁体   English   中英

如何尝试在RecyclerView中检索值我尝试了很多,但是在Android中将数据库中的数据推送到Firebase后,它从Firebase的ID中检索了空值

[英]How to Retrieve Value in RecyclerView I tried a lot but it Retrieve a Null Value from Generated ID by Firebase after Push Data in Database in Android

如何尝试在RecyclerView检索值我做了很多尝试,但是在数据库中推送数据后,它从Firebase生成的id中检索了空值,如果我不使用此方法,则直接“推送”存储在第二个id中的数据,并在Android中很好地检索并在日志猫中:

W/ClassMapper: No setter/field for -L9VWgoCymRWj9zbgK5H [image for database stracture][1]

这是我的代码:

public class TasksListActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    TaskAdapter adapter;
    List<Tasks>tasksList;
    FirebaseDatabase FDB;
    DatabaseReference DBR;
    private FirebaseAuth mAuth;

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

        recyclerView=(RecyclerView) findViewById(R.id.testingss);
        RecyclerView.LayoutManager manager=new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(manager);
        recyclerView.setHasFixedSize(true);
        mAuth = FirebaseAuth.getInstance();



        tasksList=new ArrayList<>();
        adapter=new TaskAdapter(tasksList);

        FDB=FirebaseDatabase.getInstance();

        GetDataFirebase();
    }

    void GetDataFirebase (){
        FirebaseUser currentUser = mAuth.getCurrentUser();
        final String currentid=currentUser.getUid();

        DBR=FDB.getReference("tasks").child(currentid);

        DBR.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                Tasks data=dataSnapshot.getValue(Tasks.class);

                //Toast.makeText(getApplicationContext(),tas,Toast.LENGTH_SHORT).show();
                tasksList.add(data);
                adapter.notifyDataSetChanged();
                recyclerView.setAdapter(adapter);
            }

            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }



    public  class TaskAdapter extends RecyclerView.Adapter<TaskAdapter.TaskViewHolder>{

        List<Tasks> data=new ArrayList<>();

        public TaskAdapter(List<Tasks> tasks){
            this.data=tasks;


        }




        @Override
        public TaskAdapter.TaskViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.taskslistitem,parent,false);

            return new TaskViewHolder(view);
        }

        @Override
        public void onBindViewHolder(TaskAdapter.TaskViewHolder holder, int position) {

            Tasks tasks=data.get(position);

            holder.taskName.setText(tasks.getmTaskname());
            Toast.makeText(getApplicationContext(),tasks.getmTaskname(),Toast.LENGTH_SHORT).show();
            //Toast.makeText(getApplication(),tasks.getmTaskname(),Toast.LENGTH_SHORT).show();
           // Toast.makeText(getApplicationContext(),holder.taskName.getText(),Toast.LENGTH_SHORT).show();


        }

        @Override
        public int getItemCount() {
            return data.size();
        }

        public class TaskViewHolder extends RecyclerView.ViewHolder {

            TextView taskName;

            public TaskViewHolder(View itemView) {
                super(itemView);
                taskName=(TextView) itemView.findViewById(R.id.tasksnameId);
            }
        }
    }


}

关于任务模型的类

公共课程任务{

private String mMemberEmail;
private String mTaskname;
private String mTaskDsc;
private String mTaskDeadline;


public Tasks() {
}

public Tasks(String mMemberEmail, String mTaskname, String mTaskDsc, String mTaskDeadline) {
    this.mMemberEmail = mMemberEmail;
    this.mTaskname = mTaskname;
    this.mTaskDsc = mTaskDsc;
    this.mTaskDeadline = mTaskDeadline;
}

public String getmMemberEmail() {
    return mMemberEmail;
}

public void setmMemberEmail(String mMemberEmail) {
    this.mMemberEmail = mMemberEmail;
}

public String getmTaskname() {
    return mTaskname;
}

public void setmTaskname(String mTaskname) {
    this.mTaskname = mTaskname;
}

public String getmTaskDsc() {
    return mTaskDsc;
}

public void setmTaskDsc(String mTaskDsc) {
    this.mTaskDsc = mTaskDsc;
}

public String getmTaskDeadline() {
    return mTaskDeadline;
}

public void setmTaskDeadline(String mTaskDeadline) {
    this.mTaskDeadline = mTaskDeadline;
}

}

                final Tasks tasks=new Tasks(mMemberEmail,mTasksName,mTaskDsc,mTaskDeadline);

                mUserDatabase.child("tasks").child(current_id).child(id).push().setValue(tasks).addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {

                        mAuth = FirebaseAuth.getInstance();
                        user = mAuth.getCurrentUser();

                        String current_id = user.getUid();

                        Tasks tasks=new Tasks(mMemberEmail,mTasksName,mTaskDsc,mTaskDeadline);

                        String id = child.getKey();

                        mUserDatabase.child("tasks").child(id).child(current_id).push().setValue(tasks);

                    }
                });

            }

您收到以下警告:

W/ClassMapper: No setter/field for -L9VWgoCymRWj9zbgK5H

因为您为字段使用了错误的吸气剂。 看起来像这样的字段的正确获取器:

private String mMemberEmail;

应该:

public String getMMemberEmail() { //See the first capital M
    return mMemberEmail;
}

模型中字段和吸气剂的正确命名应为:

public class Tasks {
    private String memberEmail;
    private String taskName;
    private String taskDsc;
    private String taskDeadline;

    public Tasks() {}

    public Tasks(String memberEmail, String taskName, String taskDsc, String taskDeadline) {
        this.memberEmail = memberEmail;
        this.taskName = taskName;
        this.taskDsc = taskDsc;
        this.taskDeadline = taskDeadline;
    }

    public String getMemberEmail() {return memberEmail;}

    public String getTaskName() {return taskName;}

    public String getTaskDsc() {return taskDsc;}

    public String getTaskDeadline() {return taskDeadline;}
}

因此,请记住,当Firebase Realtime Database SDK对来自数据库的对象进行反序列化时,它正在寻找遵循JavaBeans原理并根据Java Naming Conventions命名的字段。 因此,类似于memberEmail的字段的对应getter是getMemberEmail()而不是getmemberEmail() 要使其完全正常工作,请删除旧数据并添加新数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM