开发者

Error when fetching a second XML from the web

im new to android development and im trying to build my first app which looks for a online generated xml file to display information. In the first activity i created a ListView with all the entries from an XML file, as soon as i click on an entry it passes the id and goes to the 2nd activity which should access another XML file with the details. However i keep getting this error when trying to fetch the XML for the details:

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

Any ideas whats wrong? Here is the source for the "details" activity:

package en.android.itleaked.com;

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

import javax.xml.parsers.Docum开发者_如何学编程entBuilder;
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;
   }
  }
}

Here is the URL for the XML with an attached id so you can see what it looks like: http://www.it-leaked.com/app/details.php?id=50969

Any ideas whats going on? By the way i added the number 2 to every variable which has something to do with the XML parsing / fetching just to make sure theres no conflict with the other activity, but im still getting the same error.. I hope you can help me out. Thanks in advance


This question is a little old but I believe the ClassCastException is due to attempting to cast the elements in the nodelist to android.sax.Element type rather than org.w3c.dom.Element; check the imports.


Looking at your exception (which is java.lang.ClassCastException) the problem is in casting some class to another.

In your code i didn't understand the reason casting Element to Document - Element has getElementsByTagName method which you are using. Look here: http://developer.android.com/reference/org/w3c/dom/Element.html

It is the root of all evil. Element and Document both implementing Node interface, but Document isn't implements Element - that's why Element can't be cast to Document.

Anyway, expcetion line number can determine the exact error position.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜