2017-12-20 3 views
1

첫 번째 활동은 RecyclerView + Firestore가 사용되는 뉴스 피드 화면입니다. 설정 오프라인 옵션이 활성화되어 있습니다.캐시 된 데이터 복구 RecyclerView + Firestore

문제 :

이 응용 프로그램 홈 페이지와 뉴스 방송이기 때문에, 내가 내부적으로 스캔하면서 경우 FireStore 데이터를 검색 캐시 된 데이터를 표시하는 응용 프로그램을하고 싶습니다. Instagram, Twitter 등 ...

현재이 활동을 열 때 Firestore Query라고 불리며 RecyclerView로 데이터를 마운트했습니다.

Firestore의 새 데이터가로드되는 동안 Recyclerview의 마지막 업데이트에 대한 캐시 된 데이터를 표시하는 방법이 있습니다.

인터넷 연결이 모바일 일 때 우리 나라에서는 품질이 매우 좋지 않기 때문에. 그리고 처음에 Recyclerview를 호출하면 연결이 안정 될 때까지 장시간 로딩 Progressbar가 생깁니다.

내 코드는 다음과 같습니다 어댑터 경우 FireStore + RecyclerView

편집 코드 :

/*Firebase*/ 
     mDb = FirebaseFirestore.getInstance(); 
     mDb.collection("IndexTimeline_User").document(mCurrentUser.getUid()).collection("Posts").get().addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() { 
      @Override 
      public void onSuccess(QuerySnapshot documentSnapshots) { 

       mQuery = documentSnapshots.getQuery(); 
       mCardFeedList.setAdapter(mAdapter); 


      } 
     }); 
     mDb.setFirestoreSettings(settings); 


     /* Recycler */ 
     mCardFeedList = (RecyclerView) view.findViewById(R.id.explore_tab1_list); 
     mCardFeedList.setHasFixedSize(true); 
     mCardFeedList.setItemViewCacheSize(20); 
     mCardFeedList.setDrawingCacheEnabled(true); 

     mAdapter = new PostsExploreTab1Adapter(mQuery, this){ 

      @Override 
      protected void onDataChanged() { 

       if (getItemCount() == 0) { 
        mCardFeedList.setVisibility(View.GONE); 
        mProgressBar.setVisibility(View.GONE); 
        //mTxtVazio.setVisibility(View.VISIBLE); 

       } else { 
        mCardFeedList.setVisibility(View.VISIBLE); 
        mProgressBar.setVisibility(View.GONE); 
        //mTxtVazio.setVisibility(View.GONE); 
       } 


      } 
     }; 

     llmanager = new LinearLayoutManager(getActivity()); 
     mCardFeedList.setLayoutManager(llmanager); 




     /*INICIADO O RECYCLERVIEW E ADAPTER*/ 
     if (mAdapter != null) { 
      mAdapter.startListening(); 

     } 

감사합니다.

답변

0

데이터베이스에서 데이터를 가져 오는 경우 addOnSuccessListener을 사용하고 데이터베이스에서 데이터가로드 될 때만 어댑터를 설정하십시오. 즉, 새 데이터가 완전히로드되고 RecyclerView에 추가 될 때만 캐시에서 데이터를 읽습니다. 귀하의 코드는 다음과 같아야합니다 :

+0

여기에서 질문을합니까? 그런 다음 쿼리를 설정 하시겠습니까? ("Posts");) @AlexMamo – TiagoIB

+0

만약 'yourRef'가'yes '와 같으면'get()'메서드를 사용하십시오 (mQuery = mDb.collection ("IndexTimeline_User" 그리고 나서'addOnSuccessListener'를 호출합니다. –

+0

내 참조는 질문과 정확히 일치합니다. 작동합니까? http://prntscr.com/hqj4zt @AlexMamo – TiagoIB