亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讓特定的孩子進入 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 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號