2017-10-27 3 views
0

RecyclerView에 Firebase의 데이터가 표시됩니다. 나는 setPersistenceEnabled(true);을 사용했습니다. 온라인으로도 & 오프라인 모드에서도 잘 작동합니다. 그러나 문제는 오프라인 모드에서 내 앱을 열어 인터넷에 연결하면 RecyclerView가 먼저 저장된 데이터와 모든 온라인 데이터를 함께 표시하지만이 문제는 활동을 다시 시작하면 사라집니다. 여기 onCreate() 방법firebase 사용 중 작은 오류가 발생했습니다. (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 개체를 목록에 추가합니다. 이미 존재하는지 여부를 먼저 확인하지 않고 이미 존재하는 객체 만 업데이트하면됩니다.

관련 문제