Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android:如何定期更新ListView?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我从来没有以直截了当的方式工作.对不起,如果我有点模糊.我会试着详细说明我要做的事情.我正在尝试构建一个从Web服务中获取数据的列表视图.初始化listview后,我想定期轮询Web服务器并更新listview的内容.为此我做了这样的事情:

public class SampleAutoupdateList extends Activity {

     //Autoupdate handler
     private Handler handler = new Handler();
     private Runnable updater = new Runnable() {

     public void run() {

       /*
        * update the list 
        */

       try {
          Log.i("updatE","Handler called");
          searchAdapter = getFeed(URL);
          searchAdapter.notifyDataSetChanged();
          handler.postDelayed(this,Configuration.refresH_INTERVAL);
       } catch(Exception E) {
          Log.e("updatE ERROR",e.getmessage());
       }

      }

     };

     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceStatE) {

      super.onCreate(savedInstanceStatE);
      setContentView(R.layout.linearmodE);
      this.context = this;

      searchAdapter = getFeed(URL);
      LinearLayout l2 = (LinearLayout) findViewById(R.id.secondaryLayout);
      ListView list = new ListView(context);
      l2.addView(list);
      // display UI
      updateDisplay(list);
      updater.run();
     }

     private SearchAdapter getFeed(String URL) {
        try
        {
            SearchHandler handler = new SearchHandler();

            URL url = new URL(URL);

            String data = convertStreamToString(url.openStream());
            data = data.subString(data.indexOf('['),data.length()-1);
                    handler.parseJSON(data);

            return handler.getFeed();
        }
        catch (Exception eE)
        {
            // if we have a problem,simply return null
            Log.e("getFeed",ee.getmessage());
            return null;
        }
    }

    private void updateDisplay(View searchView) {
        // TODO Auto-generated method stub
        // TODO Auto-generated method stub
        searchList = (ListView) searchView;

        myProgressDialog = ProgressDialog.show(this,"Please wait...","Loading search....",truE); 

        new Thread() { 
            public void run() { 
                try{ 

                    Thread.sleep(2000); 
                } catch (Exception E) {  } 

                runOnUiThread(new Runnable() { 

                    @Override 
                    public void run() { 

                        if (searchAdapter == null)
                        {
                            Log.e("ERROR","No Feed Available");
                            return;
                        }

                        searchAdapter.setContext(context);
                        searchList.setAdapter(searchAdapter);
                        searchList.setSELEction(0);
                    } 
                }); 

                // Dismiss the Dialog 
                myProgressDialog.dismiss(); 
            } 
        }.start(); 
    }
}

SearchHandler类很简单:

public class SearchHandler  extends DefaultHandler {
    SearchAdapter _adapter;
    SearchItem _item;

    public SearchHandler()
    {
    }

    public SearchAdapter getFeed()
    {
        return _adapter;
    }

    public void parseJSON(String data) {
        // TODO Auto-generated method stub
        _adapter = new SearchAdapter();
        JSONArray parseArray;
        try {
            parseArray = new JSONArray(data);
                    for (int i=0; i < parseArray.length(); i++) {

                SearchItem item = new SearchItem();

                JSONObject jsonUser = parseArray.getJSONObject(i);
                item.set_from(jsonUser.getString ("from"));
                item.set_msg(jsonUser.getString("msg"));
            }
        } catch (JSONException E) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

无论我做什么,都会调用处理程序并获取新项目,但列表永远不会刷新…有什么可能出错的想法?

解决方法

好吧,跟随你的代码有点困难,因为你只有一个片段,而且几个真正相关的位.例如,根据您的可用代码,您的列表应该永远为空,因为您从未将searchAdapter与ListView相关联…至少在您显示代码中.

如此,以下几行似乎特别奇怪:

searchAdapter = getFeed(URL);
        searchAdapter.notifyDataSetChanged();

我将假设getFeed()(未显示)创建某种新的listadapter.如果getFeed()正在创建一个新的listadapter,则不需要在其上调用notifyDataSetChanged(),因为它的数据集没有改变 – 它是全新的.此外,除非您将此新listadapter与ListView相关联,否则新的listadapter将不起作用.

如果我正在咆哮错误的树,请虑在示例中添加行,显示getFeed()的实现以及您使用searchAdapter的位置.

大佬总结

以上是大佬教程为你收集整理的Android:如何定期更新ListView?全部内容,希望文章能够帮你解决Android:如何定期更新ListView?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。