通过MySql迭代到Android中的ListView

时间:2013-06-29 15:55:03

标签: android mysql json listview loops

我写了一个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;
    }

1 个答案:

答案 0 :(得分:0)

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

在您的服务器上,您应该更改接收请求的方式,这样当您调用服务器时,就会发布一个起始索引,以便从每个请求中获取行以及要为其获取多少行。

所以服务器的URL看起来像这样:

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

在服务器上的PHP select语句中,您更改它以便它只选择您需要的行,如下所示:

SELECT * FROM my_table LIMIT $startindex, $numofrows;

当然记得check for SQL injections

这样,您只需获取实际需要的数据,而不是一次性获取所有数据。请记住,您的应用程序位于移动操作系统上,有时会出现有点不稳定的互联网连接,因此如果您返回的数据正在增长,从用户角度来看,等待所有数据加载都不会很好,特别是当其中一些不需要时。

例如,如果你让我们说1000行数据返回,那么通过移动互联网连接获取需要一段时间。

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

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