1

AsyncTask を介して URL から XML シートをポーリングするアプリを作成しているため、mainThread に干渉しません。

接続を確立し、xml を取得してループ内の値を解析し、これらを arraylist に追加することができました。

私の問題は、アプリがハンドセットに読み込まれているときに、arraylist を arrayadapter に変換してから、アプリのリストビューに入力する必要があることです。

ハードコーディングされた 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!!");
}

私は少し立ち往生しているので、どんな助けも大歓迎です:)

4

0 に答える 0