2017-04-09 47 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中设置偏移量,而不是每次增加偏移量直到其等于总对象。不幸的是,我不能帮助你的代码,因为我不知道分页系统是如何工作的 –

相关问题