2013-04-05 96 views
1

目前,我已經添加到一個數組列表,14元,但我希望他們能夠顯示在列表視圖活動到目前爲止我有:如何在ListView中顯示一個arrayList?

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

不過,我每次運行這個時候就會崩潰,我有不知道爲什麼,因爲我之前使用一個簡單的數組做了這個。如果有人能指出我做錯了什麼,並給出一個非常好的解決方案,謝謝!

+0

LogCat會告訴你什麼地方出了問題,但是這樣一個輕量級的catch塊會讓你很難。將'e.printStackTrace()'添加到catch塊並通讀新的堆棧跟蹤,您可能會看到一個NetworkOnMainThreadException。完成此操作後,單擊[編輯]發佈您看到的警告和錯誤,這樣我們就不必猜測了。 – Sam 2013-04-05 18:21:33

+0

您無法在'主線程'上執行聯網操作。你需要將你的解析移動到後臺線程中,例如'AsyncTask' - 這也允許在工作完成後更新UI。 – Sajmon 2013-04-05 18:23:44

回答

4

首先不給類名ListView這是Android的

第二預定義類不要在UI線程中執行網絡操作。

編輯:

原因:

的Android 3.x版或更多的設備將不允許網絡操作的UI線程中執行,當您嘗試這樣做,它會拋出一個例外說你正在UI Thread上執行網絡操作,即NetworkOnMainThreadException。所以你需要做的是創建一個單獨的線程來執行網絡操作或AsyncTask。

+0

爲什麼downvote ...讓我知道如果我錯了..不要故意downvote – Pragnani 2013-04-05 18:23:46

+0

我真的不明白你對我說的話。我對這種發展非常陌生,你能夠更具體嗎? – 2013-04-05 18:36:29

+0

你不能證明他爲什麼會遇到異常。 – 2013-04-05 19:40:34

0

你的崩潰很有可能是android.os.NetworkOnMainThreadException被拋出。應用程序現在默認以嚴格模式運行,這是因爲操作系統可以讓你知道你做的事情非常非常錯誤。

您需要在後臺線程上做任何和所有的網絡請求,而不是在UI線程上,這會導致UI在網絡請求發生時不響應用戶,並可能導致ANR對話。

請參閱此question的答案,瞭解如何修復代碼以遵守最佳做法。

相關問題