2017-10-27 12 views
0

Firebaseのデータを示すRecyclerViewがあります。私はsetPersistenceEnabled(true);を使用しました。オンラインで&オフラインモードでも正常に動作します。しかし、問題はオフラインモードでアプリケーションを開き、インターネットに接続するとRecyclerViewが最初に格納されたデータとすべてのオンラインデータを一緒に表示します。アクティビティを再開すると消えます。 ここonCreate()方法firebaseの使用中に小さなエラーが発生しました。setPersistenceEnabled(true)

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) { 

     } 


    }); 


} 

}

任意の提案で、私のコードがある?? ありがとう:)

答えて

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) { 

     } 


    }); 
+0

ありがとう – AkashK

0

Firebaseの永続性はあなたの問題とは関係ありません。

ActivityまたはFragmentライフサイクルが正しく処理されておらず、最後にアプリケーションを実行したときのデータがRecyclerViewに表示されている可能性が高くなります。

あなたはオブジェクトをリストに無差別に入れています。Add最初にそれらがすでに存在するかどうかをチェックしておらず、既存のオブジェクトが既に存在する場合はそれを更新するだけではありません。

関連する問題