1

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

我已经能够建立连接、检索 xml 并在循环中解析值并将它们添加到数组列表中。

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

我已经让它与一个硬编码的 xml 文件一起工作,但是当我尝试使用我的动态 xml 中的解析值时,应用程序就会失败。

此代码正在获取 XML 表并将其添加到数组列表“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!!");
}

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

4

0 回答 0