如何在ListView中显示arrayList?

时间:2013-04-05 18:18:30

标签: android listview arraylist

目前我有14个元素添加到数组列表但我希望它们显示在listview活动中到目前为止我有:

public class ListView extends ListActivity{

  static final String baseURL ="http://www.dublincity.ie/dublintraffic/cpdata.xml?1354720067473";
  TextView tvcp;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.listview);
    StringBuilder URL = new StringBuilder(baseURL);
    String fullURL = URL.toString();
    try{
      URL website = new URL(fullURL);
      SAXParserFactory spf = SAXParserFactory.newInstance();
      SAXParser sp = spf.newSAXParser();
      XMLReader xr = sp.getXMLReader();
      HandelingXML gettingData = new HandelingXML();
      xr.setContentHandler(gettingData);
      xr.parse(new InputSource(website.openStream()));

      ArrayList<CarparkNode>carparks = gettingData.getCarparks();

      this.setListAdapter(
        new ArrayAdapter<CarparkNode>(ListView.this,R.layout.listview, android.R.id.list, carparks)
      );
    }catch(Exception e){
      tvcp.setText("error");
    }
  }
}

然而,每次我运行它都会崩溃,我不知道为什么在使用简单数组之前我已经这样做了。如果有人能够指出我做错了什么并给出一个非常感谢的解决方案!

2 个答案:

答案 0 :(得分:4)

首先不提供类名ListView这是Android中的预定义类

不要在UI线程上执行网络操作。

修改

原因:

Android版3.x或更多设备不允许在UI线程中执行网络操作,当您尝试这样做时,它会抛出一个异常,说明您正在UI线程上执行网络操作,即{{1 }}。所以你需要做的是创建一个单独的线程来执行网络操作或AsyncTask。

答案 1 :(得分:0)

您的崩溃最有可能android.os.NetworkOnMainThreadException被抛出。默认情况下,应用程序现在以严格模式运行,因此操作系统可以让您知道您正在做一些非常错误的事情。

您需要在后台线程上进行任何和所有网络请求,而不是在UI线程上,这将导致UI在网络请求进行时不响应用户,并可能导致ANR对话框。

请参阅此question的答案,了解如何修复代码以符合最佳做法。