【问题标题】:small error while using firebase setPersistenceEnabled(true)使用 firebase setPersistenceEnabled(true) 时出现小错误
【发布时间】:2017-10-27 08:56:28
【问题描述】:

我有一个RecyclerView,它显示来自 Firebase 的数据。我用过setPersistenceEnabled(true);。在线和离线模式下一切正常。但问题是,当我在离线模式下打开我的应用程序并将其连接到互联网时,RecyclerView 首先显示存储的数据和所有在线数据,但是当我重新启动活动时,这个问题就消失了。 这是我在onCreate() 方法中的代码

    list=new ArrayList<>();
    databaseReference= FirebaseDatabase.getInstance().getReference("Pdata").child("cdata");
    recyclerView= (RecyclerView)rootview.findViewById(R.id.festirecycler);
    recyclerView.setHasFixedSize(true);
    recyclerAdapter=new DisplayRecyclerAdapter(list,getContext());
    recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    recyclerView.setAdapter(recyclerAdapter );
    loadRecyclerData();


    // Inflate the layout for this fragment
    return rootview;
}

private void loadRecyclerData() {

    databaseReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot postSnapshot:dataSnapshot.getChildren()) {
                String da=postSnapshot.getValue().toString();
                list.add(da);


            }
            Collections.reverse(list);
            recyclerAdapter.notifyDataSetChanged();



        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }


    });


}

}

有什么建议吗?? 谢谢:)

【问题讨论】:

    标签: android firebase


    【解决方案1】:

    发生这种情况是因为您正在将连接从离线更改为在线,它在 onDataChanges() 方法中再次添加数据

    解决方案是在从onDataChanges() 添加之前清除数据,如下所示:

    databaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //Clear here
                list.clear()
                for (DataSnapshot postSnapshot:dataSnapshot.getChildren()) {
                    String da=postSnapshot.getValue().toString();
                    list.add(da);
    
    
                }
                Collections.reverse(list);
                recyclerAdapter.notifyDataSetChanged();
    
    
    
            }
    
            @Override
            public void onCancelled(DatabaseError databaseError) {
    
            }
    
    
        });
    

    【讨论】:

      【解决方案2】:

      Firebase 持久性不太可能与您的问题有关。

      您更有可能错误地处理了您的 Activity 或 Fragment 生命周期,并且您在您的 RecyclerView 中看到了自上次运行应用程序以来存在的数据。

      您不分青红皂白地Add将您的对象添加到列表中。您不是首先检查它们是否已经存在于其中,然后只是更新现有对象(如果它已经存在)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-21
        • 1970-01-01
        • 2019-08-08
        • 2019-05-16
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多