使用firebase时出现小错误setPersistenceEnabled(true)

时间:2017-10-27 08:56:29

标签: android firebase

我有一个显示Firebase数据的RecyclerView。我使用过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) {

        }


    });


}

}

有什么建议吗? 感谢:)

2 个答案:

答案 0 :(得分: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) {

        }


    });

答案 1 :(得分:0)

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

您更有可能错误地处理了ActivityFragment生命周期,并且您看到上次运行应用时存在RecyclerView中的数据。< / p>

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