我写了一个Android应用程序,它从远程Web服务器上的MySql数据库中提取数据。信息被解析并显示在列表视图中。列表视图还会显示可能会降低活动速度的图像。我想知道我怎么只能显示项目0-9,然后当你点击一个按钮它将显示10-19,依此类推。我可以使用“do until”在VB中完成它,但就android / java而言,我有点迷茫。任何帮助将不胜感激。
以下是我需要实现它的类。我相信我需要添加一个Integer来保持计数并实现一种“DO UNTIL”形式,然后我循环遍历数组并向“Integer”添加一个计数但是我不知道如何在这里进行。
class ProductQuery extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... file_url) {
// TODO Auto-generated method stub
try{
//Settings to send to PHP
List<NameValuePair> settings = new ArrayList<NameValuePair>();
//Adding Search Criteria(Keyword) to settings
settings.add(new BasicNameValuePair("product", product));
//Getting JSON result from request
JSONObject jObject = jParser.makeHttpRequest(url_to_php, "GET", settings);
//Display JSON in LogCat
Log.d("Product Search", jObject.toString());
//Get Result
int result = jObject.getInt(KEY_RESULT);
//If Result Equals 1 then
if(result==1){
//Getting the KEY_PRODUCTS
products = jObject.getJSONArray(KEY_PRODUCTS);
//Loop through Array
for(int i = 0; i < products.length();i++){
JSONObject x = products.getJSONObject(i);
String proPid = x.getString(KEY_PRODID);
String name = x.getString(KEY_NAME);
String price = x.getString(KEY_PRICE);
String desc = x.getString(KEY_DESCRIPTION);
String img = x.getString(KEY_IMAGE);
// creating new HashMap
HashMap<String, String> hmap = new HashMap<String, String>();
hmap.put(KEY_PRODID, proPid);
hmap.put(KEY_NAME, name);
hmap.put(KEY_PRICE, price);
hmap.put(KEY_DESCRIPTION, desc);
hmap.put(KEY_IMAGE, img);
//Hash to ArrayList
myproducts.add(hmap);
}
} else {
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
答案 0 :(得分:0)
不应在应用程序中进行分页,而应将其留给服务器。
在您的服务器上,您应该更改接收请求的方式,这样当您调用服务器时,就会发布一个起始索引,以便从每个请求中获取行以及要为其获取多少行。
所以服务器的URL看起来像这样:
http://example.com/myjsonrequest.php?startindex=10&numofrows=10
在服务器上的PHP select
语句中,您更改它以便它只选择您需要的行,如下所示:
SELECT * FROM my_table LIMIT $startindex, $numofrows;
这样,您只需获取实际需要的数据,而不是一次性获取所有数据。请记住,您的应用程序位于移动操作系统上,有时会出现有点不稳定的互联网连接,因此如果您返回的数据正在增长,从用户角度来看,等待所有数据加载都不会很好,特别是当其中一些不需要时。
例如,如果你让我们说1000行数据返回,那么通过移动互联网连接获取需要一段时间。
收到只有有限数量条目的JSonObject
后,您现在可以解析它而无需跟踪返回的条目数。
在您的Android应用程序中,您需要跟踪的是数据库中的索引,用户目前已看到,然后在每次用户抓取新页面时递增此计数器。