1

目前我有 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");
    }
  }
}

但是,每次我运行它都会崩溃,我不知道为什么我在使用简单数组之前已经这样做了。如果有人能指出我做错了什么并提供解决方案,那将非常感谢!

4

2 回答 2

4

首先不要给出类名ListView这是Android中的预定义类

第二不要在 UI Thread 上执行网络操作。

编辑:

原因:

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

于 2013-04-05T18:20:25.970 回答
0

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

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

请参阅此问题的答案,了解如何修复代码以符合最佳实践。

于 2013-04-05T18:28:10.543 回答