1

現時点では、配列リストに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");
    }
  }
}

ただし、これを実行するたびにクラッシュし、単純な配列を使用する前にこれを行ったので、理由がわかりません。誰かが私が間違っていることを指摘し、解決策を与えることができれば、とても感謝しています!

4

2 に答える 2

4

最初にクラス名を付けないでください。ListViewこれはAndroidで事前定義されたクラスです

2 番目の UI スレッドでネットワーク操作を実行しないでください。

編集:

理由:

Android バージョン 3.x 以降のデバイスでは、UI スレッドでネットワーク操作を実行できません。実行しようとすると、UI スレッドでネットワーク操作を実行していることを示す例外がスローされますNetworkOnMainThreadException。したがって、ネットワーク操作または AsyncTask を実行する別のスレッドを作成する必要があります。

于 2013-04-05T18:20:25.970 に答える