我正在创建一个通过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!!");
}
我有点卡住了,所以欢迎任何帮助:)