android - 升级到 FirebaseUI 3.0 后无法使用 FirebaseRecyclerOptions 检索数据

标签 android firebase firebase-realtime-database android-recyclerview firebaseui

我正在使用 FirebaseRecyclerOptions,因为我已升级到新的 FirebaseUI 3.0 版本,但现在我无法从数据库中检索任何内容。相同的代码过去在旧的 FirebaseRecylcerAdapter 方法中运行良好。它似乎甚至没有输入 onBindViewHolder

初始化

linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setReverseLayout(true);
        linearLayoutManager.setStackFromEnd(true);
        recyclerView = findViewById(R.id.main_recycler);
        recyclerView.hasFixedSize();
        recyclerView.setLayoutManager(linearLayoutManager);    
queryDatbase = mDatabase.child("chatlist").child(cUser);
        queryDatbase.keepSynced(true);
Query query = queryDatbase.orderByChild("time");
        query.keepSynced(true);

FirebaseRecyclerAdapter 代码

firebaseoptions = new FirebaseRecyclerOptions.Builder<ConvModel>().setQuery(query,ConvModel.class).build();

    firebaseadapter = new FirebaseRecyclerAdapter<ConvModel, ChatlistHolder>(firebaseoptions) {
        @Override
        protected void onBindViewHolder(final ChatlistHolder holder, int position,final ConvModel model) {
            final String each_user_id = firebaseadapter.getRef(position).getKey();
            Toast.makeText(MainActivity.this, each_user_id, Toast.LENGTH_SHORT).show();
            //region SET EACH USER IMAGE and USERNAME
            assert each_user_id != null;
            mDatabase.child("users").child(each_user_id).addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                    String dp = dataSnapshot.child("dp").getValue(String.class);
                    final String name = dataSnapshot.child("name").getValue(String.class);
                    holder.setName(name);
                    holder.setDp(dp,getApplicationContext());
                    // region OPEN CHAT ACTIVITY
                    holder.mView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            //open other activity

                        }
                    }); 
                }

                @Override
                public void onCancelled(@NonNull DatabaseError databaseError) {
                    Toast.makeText(getApplicationContext(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();
                }
            });//endregion
        }

        @Override
        public ChatlistHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.chatlist_single_item_layout,parent,false);
            return new ChatlistHolder(v);
        }
    };
    recyclerView.setAdapter(firebaseadapter);

最佳答案

从 FirebaseUI 3.0 版本开始,您需要显式调用 startListening() & stopListening()在适配器上指示它开始/停止从数据库中检索数据。

来自Upgrading to FirebaseUI 3.0指南:

Adapter Lifecycle - in previous versions the adapters began listening immediately upon instantiation and had a cleanup() call to stop listening. In 3.x you must explicitly call startListening() and stopListening() or pass a LifecycleOwner to the options builder.

关于android - 升级到 FirebaseUI 3.0 后无法使用 FirebaseRecyclerOptions 检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50703205/

相关文章:

java - Firebase 检查值

android - 我新发布的 Android 应用无法在市场上搜索到,但可以在 appBrain 上搜索到。

java - android - 向 MainActivity 发送广播,然后显示 TextView

android - 无法从 Android 中的首选项中获取项目

android - 在android中解析xml时出现异常

javascript - 如何在 firebase 中显示带有值事件的记录列表?

javascript - FirebaseUI 登录完成后,Firebase token 如何传递到重定向网址?

firebase - Firebase 和 Firestore 的 Multi-Tenancy 设置是否可行?

ios - 如何存储 Firebase 数据以便在 Swift 中轻松快速地访问

android - Firebase Android : Multidex error after updating dependencies