【问题标题】:How to show huge data in listview in android using Async without OnScrollListener如何在没有 OnScrollListener 的情况下使用 Async 在 android 的 listview 中显示大量数据
【发布时间】:2013-12-10 10:37:00
【问题描述】:

我想使用异步在 android listview 中显示大量数据(+50,000 条记录)。

数据来自页面中的Web服务(dot net)(每页1000条记录)。 当我得到 1000 条记录时,我必须自动更新列表视图(无需滚动)。这个过程一直持续到获取所有记录为止。

能够获取所有记录但无法更新列表视图。

我的代码是:

class XYZ extends AsyncTask<String, Integer, String> 
{

    @Override
    protected String doInBackground(String... params) {

        for(int i=1;i<=noOfPagesFromServer;i++)
        {   
            String url="http://182.72.123.138:9523/Service.svc/GetData/"+i;  

            try
            {
                HttpGet get =new HttpGet(url );
                HttpClient httpClient = new DefaultHttpClient();
                HttpResponse httpResponse = httpClient.execute(get);
                BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent()));
                StringBuilder stringBuilder = new StringBuilder();
                String line = null;
                while((line = reader.readLine()) != null)
                {
                    stringBuilder.append(line + "\n");
                }
                String responseString = stringBuilder.toString();
                JSONObject serverJSONObj = new JSONObject(responseString);
                JSONArray serverJSONArray = serverJSONObj .getJSONArray("ABC");
                for(int l=0;l<serverJSONArray.length();l++)
                {
                    JSONObject tempJSONObject=serverJSONArray.getJSONObject(l);
                    a   = tempJSONObject.getString("A");
                    b   =tempJSONObject.getString("B");
                    Model model=new Model(a,b);

                    arrayList.add(model);}
            } catch (Exception e) {

                e.printStackTrace();
            }
            publishProgress(null);
            SystemClock.sleep(6000);
        }return null;}



          protected void onProgressUpdate(Integer... values) 
    { 

        super.onProgressUpdate(values); 
        adapter1 = new CustomListViewAdapter(SearchActivity.this,R.layout.row,arrayList); 
        listView.setAdapter(adapter1); 
        listView.this.adapter1.notifyDataSetChanged(); 
    }  


    @Override
    protected void onPostExecute(String result) {

        try{
            super.onPostExecute(result);

                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {


                        adapter1 = new CustomListViewAdapter(SearchActivity.this,R.layout.row,arrayList);
                    adapter1.notifyDataSetChanged();
                    listView.setAdapter(adapter1);
                    }
                });

        }
        catch(Exception e){
            e.printStackTrace();

        }
    }

感谢您的回复

【问题讨论】:

    标签: android listview android-listview android-asynctask


    【解决方案1】:

    您可以使用 onProgressUpdate() 并获得所需的结果...在收到 1000 条记录并更新列表后更新您的模型...

    【讨论】:

    • 我已经实现了 onProgressUpdate() 但我的列表仍然没有更新。
    • 您需要在获取 1000 条记录后发布进度...并在 onprogressupdate() 中更新模型/数据,然后是 notifyDatasetchanged...您是否在同一流程中实施?请发布实现的代码...
    • 受保护的 void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); adapter1 = new CustomListViewAdapter(SearchActivity.this,R.layout.row,arrayList); listView.setAdapter(adapter1); listView.this.adapter1.notifyDataSetChanged(); }
    • 对于从 doInBackground(String... params) 调用上面的 onProgressUpdate() 正在使用:publishProgress(null);SystemClock.sleep(6000);
    • 您如何确定 1000 条记录的完成情况...能否请您发布一次完整的更新代码...
    猜你喜欢
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 2016-11-12
    相关资源
    最近更新 更多