2011-01-05 11 views
0

ich bin neu in Android-Entwicklung und ich versuche, meine erste App zu erstellen, die für eine online generierte XML-Datei sucht, um Informationen anzuzeigen. In der ersten Aktivität habe ich eine ListView mit allen Einträgen aus einer XML-Datei erstellt, sobald ich auf einen Eintrag klicke, übergibt er die ID und geht zur zweiten Aktivität, die auf eine andere XML-Datei mit den Details zugreifen soll. Ich erhalte diesen Fehler jedoch beim Versuch, die XML für die Details zu holen:Fehler beim Abrufen eines zweiten XML aus dem Internet

java.lang.ClassCastException: org.apache.harmony.xml.dom.ElementImpl

Irgendwelche Ideen, was ist falsch ? Hier ist die Quelle für die „Details“ Aktivität:

package en.android.itleaked.com; 

import java.io.InputStream; 
import java.net.URL; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 

import android.app.Activity; 
import android.graphics.drawable.Drawable; 
import android.os.Bundle; 
import android.sax.Element; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class showReleases extends Activity { 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.releasedetails); 

    getFeed(); 

} 


public void getFeed() { 
    Bundle extras = getIntent().getExtras(); 

    try { 
     URL url2 = new URL("http://www.it-leaked.com/app/details.php?id=" + extras.getString("id")); 
    DocumentBuilderFactory dbf2 = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db2 = dbf2.newDocumentBuilder(); 
    Document doc2 = db2.parse(new InputSource(url2.openStream())); 
    doc2.getDocumentElement().normalize(); 
    NodeList nodeList2 = doc2.getElementsByTagName("item"); 
    String relTitle[] = new String[nodeList2.getLength()]; 
    String relCover[] = new String[nodeList2.getLength()]; 
    for (int i = 0; i < nodeList2.getLength(); i++) { 
    Node node2 = nodeList2.item(i); 
    Element fstElmnt2 = (Element) node2; 
    NodeList nameList2 = ((Document) fstElmnt2).getElementsByTagName("title"); 
    Element nameElement2 = (Element) nameList2.item(0); 
    nameList2 = ((Node) nameElement2).getChildNodes(); 
    relTitle[i] = ((Node) nameList2.item(0)).getNodeValue(); 

    NodeList coverList2 = ((Document) fstElmnt2).getElementsByTagName("cover"); 
    Element coverElement2 = (Element) coverList2.item(0); 
    coverList2 = ((Node) coverElement2).getChildNodes(); 
    relCover[i] = ((Node) coverList2.item(0)).getNodeValue(); 
    } 
    TextView txtView = (TextView)findViewById(R.id.TextView01); 
    txtView.setText(relTitle[0]); 

     ImageView imgView =(ImageView)findViewById(R.id.ImageView01); 
    Drawable drawable = LoadImageFromWebOperations(relCover[0]); 
     imgView.setImageDrawable(drawable); 


    } 
    catch (Exception e) { 
    TextView txtView2 = (TextView)findViewById(R.id.TextView02); 
    txtView2.setText("Error: " + e); 
    } 

} 

    private Drawable LoadImageFromWebOperations(String url) 
    { 
    try 
    { 
    InputStream is = (InputStream) new URL(url).getContent(); 
    Drawable d = Drawable.createFromStream(is, "src name"); 
    return d; 
    }catch (Exception e) { 
    System.out.println("Exc="+e); 
    return null; 
    } 
    } 
} 

Hier wird die URL für die XML mit einer angehängten ID, damit Sie sehen, wie es aussieht: http://www.it-leaked.com/app/details.php?id=50969

Irgendwelche Ideen, was los ist? Übrigens habe ich jeder Variable die Nummer 2 hinzugefügt, die etwas mit dem XML-Parsing/-Fetching zu tun hat, nur um sicherzustellen, dass es keinen Konflikt mit der anderen Aktivität gibt, aber ich bekomme immernoch denselben Fehler .. Ich hoffe du kannst mir helfen aus. Vielen Dank im Voraus

+1

Faustregel: Geben Sie uns immer die nützlichsten Informationen über Ihren Fehler. In Ihrem Fall haben Sie uns Ihre Fehlerstack-Ablaufverfolgung nicht angezeigt. Denkst du nicht, dass es für uns leichter ist zu sehen, wo der Fehler aufgetreten ist und in welchen Zeilen, anstatt zu erwarten, dass wir deinen Code kopieren und einfügen, kompilieren und ausführen? – darioo

+0

hey, zuerst einmal vielen Dank für die Antwort. Ich bin nicht ganz sicher, was Sie mit Stack-Trace meinen. Ich habe versucht, auf Debug zu klicken, aber die Eclipse-Konsole gibt mir keine Fehlermeldung, ich habe die Fehlermeldung durch catch (Ausnahme e) .. danke im Voraus – robs

Antwort

0

Betrachtet man die Ausnahme (die java.lang.ClassCastException ist), liegt das Problem darin, eine Klasse in eine andere umzuwandeln.

In Ihrem Code habe ich nicht verstanden, warum das Argument Element zu Dokument - Element getElementsByTagName-Methode verwendet, die Sie verwenden. Schau hier: http://developer.android.com/reference/org/w3c/dom/Element.html

Es ist die Wurzel allen Übels. Element und Dokument implementieren beide die Knotenschnittstelle, aber Dokument ist kein implementiertes Element - deshalb kann Element nicht in Dokument umgewandelt werden.

Wie auch immer, expection line number kann die genaue Fehlerposition bestimmen.

4

Diese Frage ist ein wenig alt, aber ich glaube, die ClassCastException ist aufgrund der Versuch, die Elemente in der Nodelist auf android.sax.Element type rather than org.w3c.dom.Element; überprüfen Sie die Importe.

Verwandte Themen