【问题标题】:How do you display an arrayList in a ListView?如何在 ListView 中显示 arrayList?
【发布时间】:2013-04-05 18:18:30
【问题描述】:

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

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");
    }
  }
}

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

【问题讨论】:

  • LogCat 会告诉你出了什么问题,但这样一个轻量级的 catch 块会让这变得困难。将 e.printStackTrace() 添加到您的 catch 块并阅读新的堆栈跟踪,您可能会看到 NetworkOnMainThreadException。完成此操作后,单击edit 发布您看到的警告和错误,这样我们就不必猜测了。
  • 您无法对Main Thread 执行网络操作。您需要将解析移至后台线程,例如 AsyncTask - 这也允许在工作完成后更新 UI

标签: android listview arraylist


【解决方案1】:

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

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

编辑:

原因:

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

【讨论】:

  • 为什么要投反对票...如果我错了请告诉我...不要故意投反对票
  • 我并没有真正理解你对我说的话。我对这种开发很陌生,你能说得更具体些吗?
  • 你没有解释为什么他会例外。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-07-12
    • 2017-08-15
    • 2019-04-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    • 2013-03-10
    • 2014-09-08
    相关资源
    最近更新 更多