让特定的孩子进入 Firebase RecyclerView

构建用户活动,尝试从数据库(名称、已售商品和日期)中检索特定信息,从所有用户类和我的数据库参考中获取此信息,并将其显示在我的应用程序的 Recyclerview 中。

我的数据库

http://img3.mukewang.com/628ddd2f0001e06403630269.jpg

为此https://github.com/firebase/FirebaseUI-Android/尝试了 FirebaseUI-Android


我的应用程序崩溃了!


我的代码:


  @Override

    protected void onStart() {

        super.onStart();

        startListening();

    }


    public void startListening(){

        Query query = FirebaseDatabase.getInstance()

                .getReference()

                .child("Users")

                .limitToLast(50);


        FirebaseRecyclerOptions<ALL_USERS> options =

                new FirebaseRecyclerOptions.Builder<ALL_USERS>()

                        .setQuery(query, ALL_USERS.class)

                        .build();



        FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter<ALL_USERS, UsersViewHolder>(options) {


            @Override

            public UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                View view = LayoutInflater.from(parent.getContext())

                        .inflate(R.layout.users_card_layout, parent, false);


                return new UsersViewHolder(view);

            }


            @Override

            protected void onBindViewHolder(@NonNull UsersViewHolder usersViewHolder, int i, @NonNull ALL_USERS all_users) {

                usersViewHolder.setName(all_users.getName());

            }

        };


        mUsersList.setAdapter(adapter);

        adapter.startListening();



    }



    public static class UsersViewHolder extends RecyclerView.ViewHolder{


        View mView;



        public UsersViewHolder(View itemView) {

            super(itemView);


            mView=itemView;

        }


        public void setName(String name){

            TextView userNameView = mView.findViewById(R.id.Users_Name);

            userNameView.setText(name);

        }

    }



}


米琪卡哇伊
浏览 93回答 1
1回答

一只甜甜圈

您的代码中的问题在于您的ALL_USERS类中有一个名为的字段Date,但您使用的是一个名为的 getter getDate(),这是不正确的,因为 Firebase 正在数据库中查找名为date而不是的字段Date。看到小写d字母与大写字母了D吗?有两种方法可以解决此问题。第一个是通过根据Java Naming Conventions重命名字段来更改模型类。所以你的模型类应该是这样的:public class ALL_USERS {&nbsp; &nbsp; private String name, sonyTV;&nbsp; &nbsp; private long date;&nbsp; &nbsp; public ALL_USERS() {}&nbsp; &nbsp; public ALL_USERS(String name, String sonyTV, long date) {&nbsp; &nbsp; &nbsp; &nbsp; this.name = name;&nbsp; &nbsp; &nbsp; &nbsp; this.sonyTV = sonyTV;&nbsp; &nbsp; &nbsp; &nbsp; this.date = date;&nbsp; &nbsp; }&nbsp; &nbsp; public String getName() { return name; }&nbsp; &nbsp; public String getSonyTV() { return sonyTV; }&nbsp; &nbsp; public long getDate() { return date; }}请参阅在此示例中,有private字段和公共 getter。还有一个更简单的解决方案,直接在公共字段上设置值,如下所示:public class ALL_USERS {&nbsp; &nbsp; public String name, sonyTV;&nbsp; &nbsp; public long date;}现在只需删除当前数据并使用正确的名称再次添加它。此解决方案仅在您处于测试阶段时才有效。还有第二种方法,就是使用annotations. 因此,如果您更喜欢使用私有字段和公共 getter,则应仅在 getter 前面使用PropertyName注释。所以你的ALL_USERS班级应该是这样的:public class ALL_USERS {&nbsp; &nbsp; private String name, SonyTV;&nbsp; &nbsp; private long Date;&nbsp; &nbsp; public ALL_USERS() {}&nbsp; &nbsp; public ALL_USERS(String name, String sonyTV, long date) {&nbsp; &nbsp; &nbsp; &nbsp; this.name = name;&nbsp; &nbsp; &nbsp; &nbsp; SonyTV = sonyTV;&nbsp; &nbsp; &nbsp; &nbsp; Date = date;&nbsp; &nbsp; }&nbsp; &nbsp; public String getName() { return mame; }&nbsp; &nbsp; @PropertyName("SonyTV")&nbsp; &nbsp; public String getSonyTV() { return SonyTV; }&nbsp; &nbsp; @PropertyName("Date")&nbsp; &nbsp; public long getDate() { return Date; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java