Android:从arrayadapter / arraylist填充listview

时间:2012-10-30 08:54:37

标签: android eclipse listview arraylist android-arrayadapter

我正在创建一个通过AsyncTask从url轮询XML表的应用程序,因此它不会干扰mainThread。

我已经能够建立连接,检索xml并在循环中解析值并将它们添加到arraylist中。

我的问题是,当应用程序加载到手机上时,应该将arraylist转换为arrayadapter,然后在应用程序中填充listview。

我已经使用了硬编码的xml文件,但是当我尝试使用动态xml中的解析值时,应用程序失败了。

此代码获取XML表并将其添加到arraylist“menuItems” - 这很好用

@Override
protected Boolean doInBackground(String... params) {

Log.d("beskeden", "Henter adressen: " + URL);

try{
ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();            

XMLParser parser = new XMLParser(); 
String xml = parser.getXmlFromUrl(URL); // getting XML 
Document doc = parser.getDomElement(xml); // getting DOM element 

NodeList nl = doc.getElementsByTagName(KEY_ITEM); 

// looping through all item nodes <item> 
for (int i = 0; i < nl.getLength(); i++) { 


     HashMap<String, String> map = new HashMap<String, String>(); 
     map.put(KEY_NAVN, nl.item(i).getChildNodes().item(1).getTextContent());
     map.put(KEY_BESKRIVELSE, nl.item(i).getChildNodes().item(1).getTextContent()); 
     map.put(KEY_THETYPE, nl.item(i).getChildNodes().item(1).getTextContent()); 
     map.put(KEY_THETIMER, nl.item(i).getChildNodes().item(1).getTextContent()); 
     map.put(KEY_THEGRADER, nl.item(i).getChildNodes().item(1).getTextContent()); 
     map.put(KEY_THESEMERE, nl.item(i).getChildNodes().item(1).getTextContent()); 
     map.put(KEY_IDP, nl.item(i).getChildNodes().item(1).getTextContent());                  


    Log.e("Beskeden", nl.item(i).getChildNodes().item(1).getNodeName() + ": " + nl.item(i).getChildNodes().item(1).getTextContent());               
    Log.e("Beskeden", nl.item(i).getChildNodes().item(3).getNodeName() + ": " + nl.item(i).getChildNodes().item(3).getTextContent());               
    Log.e("Beskeden", nl.item(i).getChildNodes().item(5).getNodeName() + ": " + nl.item(i).getChildNodes().item(5).getTextContent());               
    Log.e("Beskeden", nl.item(i).getChildNodes().item(7).getNodeName() + ": " + nl.item(i).getChildNodes().item(7).getTextContent());

    menuItems.add(map);                 
}        


Log.d("beskeden", "Antal theer: " + nl.getLength());            
Log.d("beskeden", "Xml er blevet parset");


return true;
} catch (Exception e){
return false;
}

}

以下代码正在这样做我无法编译和测试它 - 令人沮丧:/

//@Override
protected void onPostExecute(final Boolean success) {
//super.onPostExecute(result);
Log.d("Besked", "Post executen");

if (success) {
    Log.d("Beskeden", "SUCCES!!");
    ArrayAdapter adapter = new ArrayAdapter(this, R.layout.list_item, menuItems);
}else{
        Log.d("Beskeden", "FAIL!!");
}

我有点卡住了,所以欢迎任何帮助:)

0 个答案:

没有答案