2017-06-06 16 views
0

FireBaseデータベースのすべての書籍を表示できますが、10冊の書籍を10ページ分読み込むと、画面に何も表示されず、Logcutにエラーがありません。Android Firebaseを使用したページ設定

私のコードでどこが間違っているのか理解してください。あなたのdate_creationフィールドに間違ったstartAt値を使用

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

startAtの値はdate_creationのようにフォーマットする必要があります(例:startAt=5ですが、date_creation=1499705022735です。比較できません)。startAt=1499705022735が必要です。

のようなものを使用してください:最後にロードされたリスト項目のフィールドdate_creationの値を保持し

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

を、これは次の要求のためのあなたのフィールドstartAtになります。 これは非常にうまく見えませんが、これはFirebaseのこのような場合の唯一の解決策です。

関連する問題