2017-06-06 76 views
0

我可以顯示FireBase數據庫中的所有書籍,但是一旦我使用分頁加載10本書籍,我的屏幕上就沒有任何內容顯示,並且我的Logcut中也沒有錯誤。使用Android Firebase的分頁

請幫我理解我的代碼在哪裏出錯。

private boolean isLoading; 
    int mPageEndOffset = 0; 
    int mPageLimit = 10; 

     //OnCreate 

     listAdapter = new FeedListAdapter(getActivity(), feedItems); 
     listView.setAdapter(listAdapter); 
     listView.setOnItemClickListener(myClickListener); 

     listView.setOnScrollListener(new AbsListView.OnScrollListener() { 
      @Override 
      public void onScrollStateChanged(AbsListView absListView, int i) { 

      } 

      @Override 
      public void onScroll(AbsListView absListView, int firstVisibleItem, 
           int visibleItemCount, int totalItemCount) { 



       if (mPageEndOffset != 0) { 
        int lastInScreen = firstVisibleItem + visibleItemCount; 
        if ((lastInScreen == totalItemCount) && !(isLoading)) { 
         loadData(); 
        } 
       } 

      } 
     }); 


     //Load More Data from FireBase Database 
      private void loadData() { 

     ref.orderByChild("date_creation").limitToLast(mPageLimit).startAt(mPageEndOffset).addValueEventListener(new ValueEventListener() { 
      @Override 
      public void onDataChange(DataSnapshot dataSnapshot) { 

       isLoading = true; 


       for (DataSnapshot dataSnap : dataSnapshot.getChildren()) { 

        Book valueBook = dataSnap.getValue(Book.class); 
        keyId = dataSnap.getKey(); 

        String titreLivreToDisplay = valueBook.getNom_livre(); 
        String descLivreToDisplay = valueBook.getDesc_livre(); 
        String prixLivreToDisplay = valueBook.getPrix_livre(); 
        String timeToDisplay = valueBook.getDate_creation(); 
        String filePathToDiplay = valueBook.getChemin_image(); 
        String villeToDisplay = valueBook.getVille_livre(); 
        String typeAnnToDisplat = valueBook.getType_annonce_selected(); 
        String catAnnToDisplay = valueBook.getCat_selected(); 

        } 


        valueBook.setNom_livre(titreLivreToDisplay); 
        valueBook.setDesc_livre(descLivreToDisplay); 
        valueBook.setPrix_livre(prixLivreToDisplay); 
        valueBook.setDate_creation(timeToDisplay); 
        valueBook.setChemin_image(filePathToDiplay); 
        valueBook.setVille_livre(villeToDisplay); 
        valueBook.setType_annonce_selected(typeAnnToDisplat); 
        valueBook.setCat_selected(catAnnToDisplay); 
        valueBook.setKeyIdNode(keyId); 


        feedItems.add(valueBook); 


       } 


       if (feedItems != null && feedItems.size() != 0) { 


        Collections.reverse(feedItems); 
        listAdapter.notifyDataSetChanged(); 

        mPageEndOffset += mPageLimit; 
        isLoading = false; 

       } 

      } 


      @Override 
      public void onCancelled(DatabaseError databaseError) { 

       String message = "Server error. Refresh page"; 
       Toast.makeText(getActivity(), message, Toast.LENGTH_SHORT).show(); 

      } 
     }); 
    } 
+0

請有人對我的問題有解決方案或解釋? –

回答

0

您用於date_creation場錯誤startAt值。 startAt的值應格式爲date_creation(例如,現在您有startAt=5,但是date_creation=1499705022735並且它們不能被比較,您應該有startAt=1499705022735)。

嘗試使用類似:

private long offset = 0; 
private int limit = 10; 
private boolean isLastPage = false; 

if (!isLastPage) loadData(offset, limit); 

//Condition for loaded data 
if (books.size() > 0) { 
    if (books.size() < limit - 1) isLastPage = true; 
    else { 
     offset = books.get(books.size() - 1).getDate_creation(); 
     books = books.subList(0, books.size() - 1); 
    } 
} else isLastPage = true; 

//for your firebase reference 
ref.orderByChild("createdAt").startAt(offset).limitToFirst(limit); 

保留最後加載列表項的場date_creation的價值,這將是你的下一個請求場startAt。 它看起來不太好,但是這是Firebase這種情況下唯一可行的解​​決方案,它可以工作。