我正在使用this排球榜样
它完美无缺,但是当我将数据的响应更改为来自服务器的150多条记录时,需要很长时间才能加载。
所以我想加载少量数据5-10记录然后另外5-10条记录。
我怎么能用Volley做到这一点?
答案 0 :(得分:1)
Volley将获取它应该在客户端(移动端)接收的所有响应。无法在客户端或移动端完成此类行为。
这应该在API
或server side
中通过在服务中实施pagination
来完成,如下所示:
http://serviceendpoint.com?start=0&&end=5获取前五个记录 http://serviceendpoint.com?start=5&&end=10获取下五个记录。
//Constant Variable denoting after how many
//to call in one service
//items numbers you need
private final int LIST_FETCH_COUNT =5;
private final int TOTAL_COUNT=1500;
private int start=0;
private int end=0;
//you can do something like this
for(int i=0;i<TOTAL_COUNT;i+=LIST_FETCH_COUNT){
callAsyncService(i,i+LIST_FETCH_COUNT);
}
private void callAsyncService(int start,int end){
//create a new async object
asynObject.execute(Void,Void,start,end);
}
//inside your async
doInBackground(params...){
//get start and end values from params and run a service
}
答案 1 :(得分:0)
您可以使用AsyncTask执行以下操作:
private class DatabaseTask extends AsyncTask<URL, Integer, String> {
protected String doInBackground(URL... urls) {
//put here your volley query.
}
return results;
}
protected void onProgressUpdate(Integer... progress) {
//You can show the progress of the download with this function:
setProgressPercent(progress[0]);
}
protected void onPostExecute(String results) {
//Parse the results here and show them in the UI.
}
}
然后,假设您正在尝试连接到在线数据库(例如MySQL数据库),您可以轻松地为数据库实现PHP接口,该接口仅返回您想要的记录数量(例如10)并调用DatabaseTask无论什么时候需要记录。 或者,您可以在计时器上执行单独的线程,该计时器会在计时器触发时发送查询。