FirebaseRecyclerAdapter的回调未运行

时间:2017-10-17 05:00:00

标签: android firebase firebase-realtime-database

通过代码实验室进行Firebase Android友好聊天 - https://codelabs.developers.google.com/codelabs/firebase-android/ - 我遇到的问题是第7步没有达到/调用回调:阅读消息

通过/ android-start项目,我能够完成第一步2-6:

  1. 概述
  2. 获取示例代码
  3. 导入入门应用
  4. 创建Firebase控制台项目
  5. 运行入门应用
  6. 启用身份验证(通过项目控制台添加包名称和SHA1的Android应用程序等)
  7. 但是,当我去做第7步时 - 没有一个回调被调用。我运行应用程序,登录/退出步骤正常。

    我按照那里的指示导入了initial_messages.json并完全复制了第7步的代码(尝试了几次尝试以确保我可能没有错过任何内容) ..然后甚至在完成/ android项目中尝试过。还有一个问题,即回调永远不会运行,因此微调器就会挂起。

    由于代码太多,我会发布我期待回调运行的部分。谁能告诉我这里可能缺少什么?没问题 - 如果它有助于添加更多的代码。感谢您的阅读

        // mProgressBar.setVisibility(ProgressBar.INVISIBLE);
        // New child entries
        mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
    
        SnapshotParser<FriendlyMessage> parser = new SnapshotParser<FriendlyMessage>() {
            @Override
            public FriendlyMessage parseSnapshot(DataSnapshot dataSnapshot) {
                ... 
            }
        };
        ...
    
        DatabaseReference messagesRef = mFirebaseDatabaseReference.child(MESSAGES_CHILD);
    
        ... 
    
        FirebaseRecyclerOptions<FriendlyMessage> options =
                new FirebaseRecyclerOptions.Builder<FriendlyMessage>()
                        .setQuery(messagesRef, parser)
                        .build();
    
        mFirebaseAdapter = new FirebaseRecyclerAdapter<FriendlyMessage, MessageViewHolder>(options) {
            @Override
            public MessageViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
                ... 
            }
    
            @Override
            protected void onBindViewHolder(final MessageViewHolder viewHolder,
                                            int position,
                                            FriendlyMessage friendlyMessage) {
                ....
    
            }
        };
    
        mFirebaseAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
            @Override
            public void onItemRangeInserted(int positionStart, int itemCount) {
                ...
            }
        });
    
    
        mMessageRecyclerView.setAdapter(mFirebaseAdapter);
    

1 个答案:

答案 0 :(得分:3)

在FirebaseUI 3.0版中,引入了新的lifecycle policy for FirebaseRecyclerAdapter。因此,您现在需要明确呼叫startListening()&amp;适配器上的stopListening()指示它启动&amp;停止从数据库中检索数据。

来自FirebaseUI 3.0 upgrade guide

  

适配器生命周期 - 在先前版本中,适配器开始监听   在实例化后立即进行cleanup()呼叫停止   听着。在3.x中,您必须明确调用startListening()和   stopListening()或将LifecycleOwner传递给选项构建器。

这是一个非常新的版本,看起来代码实验室尚未更新以反映这一重大变化。我将其提升为an issue on the firebase/friendlychat-android GitHub repo