为了账号安全,请及时绑定邮箱和手机立即绑定

让特定的孩子进入 Firebase RecyclerView

让特定的孩子进入 Firebase RecyclerView

米琪卡哇伊 2022-05-25 15:39:10
构建用户活动,尝试从数据库(名称、已售商品和日期)中检索特定信息,从所有用户类和我的数据库参考中获取此信息,并将其显示在我的应用程序的 Recyclerview 中。我的数据库为此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);        }    }}
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

您的代码中的问题在于您的ALL_USERS类中有一个名为的字段Date,但您使用的是一个名为的 getter getDate(),这是不正确的,因为 Firebase 正在数据库中查找名为date而不是的字段Date。看到小写d字母与大写字母了D吗?


有两种方法可以解决此问题。第一个是通过根据Java Naming Conventions重命名字段来更改模型类。所以你的模型类应该是这样的:


public class ALL_USERS {

    private String name, sonyTV;

    private long date;


    public ALL_USERS() {}


    public ALL_USERS(String name, String sonyTV, long date) {

        this.name = name;

        this.sonyTV = sonyTV;

        this.date = date;

    }


    public String getName() { return name; }

    public String getSonyTV() { return sonyTV; }

    public long getDate() { return date; }

}

请参阅在此示例中,有private字段和公共 getter。还有一个更简单的解决方案,直接在公共字段上设置值,如下所示:


public class ALL_USERS {

    public String name, sonyTV;

    public long date;

}

现在只需删除当前数据并使用正确的名称再次添加它。此解决方案仅在您处于测试阶段时才有效。


还有第二种方法,就是使用annotations. 因此,如果您更喜欢使用私有字段和公共 getter,则应仅在 getter 前面使用PropertyName注释。所以你的ALL_USERS班级应该是这样的:


public class ALL_USERS {

    private String name, SonyTV;

    private long Date;


    public ALL_USERS() {}


    public ALL_USERS(String name, String sonyTV, long date) {

        this.name = name;

        SonyTV = sonyTV;

        Date = date;

    }


    public String getName() { return mame; }

    @PropertyName("SonyTV")

    public String getSonyTV() { return SonyTV; }

    @PropertyName("Date")

    public long getDate() { return Date; }

}


查看完整回答
反对 回复 2022-05-25
  • 1 回答
  • 0 关注
  • 92 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信