0

我编写了一个从远程 Web 服务器上的 MySql 数据库中提取数据的 Android 应用程序。信息被解析并显示在列表视图中。列表视图还显示可能减慢活动的图像。我想知道我如何只能显示项目 0-9,然后当您单击一个按钮时,它将显示 10-19,依此类推。我可以在 VB 中使用“do until”来做到这一点,但就 android/java 而言,我有点迷路了。任何帮助,将不胜感激。

下面是我需要实现它的类。我相信在循环遍历数组并向“整数”添加计数之前,我需要添加一个整数来保持计数并实现一种“DO UNTIL”形式,但我不知道如何在这里进行。

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;
    }
4

1 回答 1

0

您应该将其留给服务器,而不是在应用程序中进行分页。

在您的服务器上,您应该更改接收请求的方式,以便在调用服务器时发布一个开始索引以从中获取行以及您希望为每个请求获取多少行。

因此,服务器的 url 可能如下所示:

http://example.com/myjsonrequest.php?startindex=10&numofrows=10

在服务器上的 PHPselect语句中,您对其进行更改,使其仅选择您需要的行,如下所示:

SELECT * FROM my_table LIMIT $startindex, $numofrows;

当然记得检查 SQL 注入

这样,您只获取您真正想要的数据,而不是一次性获取所有数据。请记住,您的应用程序在移动操作系统上,有时互联网连接有些不稳定,因此如果您返回的数据正在增长,从用户的角度来看,坐下来等待所有数据加载并不是一件好事,尤其是当其中一些还不需要时。

例如,假设您返回了 1000 行数据,那么通过移动互联网连接获取数据需要一段时间。

在您收到JSonObject只有有限数量的条目后,您现在可以解析它而无需跟踪返回了多少条目。

在您的 Android 应用程序中,您只需要跟踪数据库中的索引,用户到目前为止看到的内容,然后在每次用户获取新页面时递增此计数器。

于 2013-06-29T22:15:30.207 回答