2017-04-09 44 views
0

我想從Users表中的所有用戶那裏獲取一些數據。我發現我必須使用Data paging。我寫了特性47->https://backendless.com/feature-47-loading-data-objects-from-server-with-sorting/(因爲我也 必須排序)中描述的相同的代碼,但後來我發現這個代碼僅從第一頁獲取數據。然後,我決定必須進入下一頁並閱讀它,直到它的大小不等於零。下面,你可以看到我的錯解:如何從所有頁面檢索數據?

QueryOptions queryOptions = new QueryOptions(); 
    List<String> list = new ArrayList<String>() ; 
    list.add("point DESC") ; 
    queryOptions.setSortBy(list); 
    BackendlessDataQuery backendlessDataQuery = new BackendlessDataQuery(); 
    backendlessDataQuery.setQueryOptions(queryOptions); 

    Backendless.Data.of(BackendlessUser.class).find(backendlessDataQuery, new AsyncCallback<BackendlessCollection<BackendlessUser>>() { 
     @Override 
     public void handleResponse(BackendlessCollection<BackendlessUser> one) { 


      while(one.getCurrentPage().size()>0) { 
       Iterator<BackendlessUser> it = one.getCurrentPage().iterator(); 

       while (it.hasNext()) { 

       //something here,not so important 



       } 

       one.nextPage(this);// here I want to get next page, 
       //but seems like it does not work, cause my loop became infinite 







      } 







    } 

我認爲我必須使用下一頁法的AsyncCallback代替one.nextPage(this),但如果我這樣做,方法無法循環跟上。那麼,我該如何解決我的問題?

+0

嘗試使用事件;所以基本上,當第一次調用完成時,將next_page_token傳遞給調用類;然後用該令牌啓動下一個http請求;這也意味着你不會做循環 – Eenvincible

回答

0

我竟然無法找到與您的解決方案的問題,但我解決了使用這樣的問題:)

INT TOT = response.getTotalObjects(

得到對象的總數在第一響應。然後使用一個循環,直到您的對象列表具有size = tot。在每個循環中,進行查詢,將偏移量設置爲列表的當前大小。

+0

我明白'getTotalObjects()'方法返回表中的所有記錄量。但爲什麼我需要它?現在,我有17個用戶在我的桌子上,我想通過他們所有人。第一頁的大小是10,這意味着我有10個用戶。還有7位用戶。然後我想要獲得有7個用戶休息的下一頁。我怎樣才能拿下一頁?根據你的回答,我寫了代碼,但它似乎是錯誤的,因爲有一個無限循環。請幫忙。 (one.getCurrentPage()。size()> 0){0}){while(response.getCurrentPage()。size> 0){' – abay

+0

'while(one.getCurrentPage()。size()> 0) Iterator it = one.getCurrentPage()。iterator(); (it.hasNext()){ //東西 } one.getPage(10,offset,this); //似乎這行不正確,爲什麼? } ' – abay

+0

您可以在QueryOptions中設置偏移量,而不是每次增加偏移量直到其等於總對象。不幸的是,我不能幫助你的代碼,因爲我不知道分頁系統是如何工作的 –

相關問題