2011-01-05 4 views
0

메신저로 안드로이드 개발에 익숙하며 정보를 표시하기 위해 온라인으로 생성 된 XML 파일을 찾는 첫 번째 앱을 만들려고합니다. 첫 번째 작업에서는 XML 파일의 모든 항목이 포함 된 ListView를 만든 후 항목을 클릭하자마자 ID를 전달하고 세부 정보가있는 다른 XML 파일에 액세스해야하는 두 번째 활동으로 이동합니다.웹에서 두 번째 XML을 가져 오는 중 오류가 발생했습니다.

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

어떤 아이디어가 무슨 잘못 자세한 내용은 XML을 가져 오기 위해 시도 할 때 그러나 나는이 오류가 계속 ? 여기

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; 
    } 
    } 
} 

부착 된 ID와 XML에 대한 URL은 그래서 당신이 어떻게 생겼는지 볼 수 있습니다 : 세드릭 http://www.it-leaked.com/app/details.php?id=50969

모든 아이디어를 여기에 "세부 사항"활동에 대한 소스는? 그런데 XML 파싱과 관련된 모든 변수에 숫자 2를 추가 했으므로 다른 활동과의 충돌은 없지만 여전히 동일한 오류가 발생합니다. 당신이 나를 도울 수 있기를 바랍니다. 아웃. 미리 감사드립니다.

+1

엄지 규칙 : 항상 오류에 대한 가장 유용한 정보를 제공해주십시오. 귀하의 경우에는 오류 스택 추적을 표시하지 않았습니다. 코드 복사 및 붙여 넣기, 컴파일 및 실행을 기대하는 대신 오류가 발생한 위치와 줄의 위치를보다 쉽게 ​​파악할 수 있다고 생각하십니까? – darioo

+0

안녕하세요, 먼저 답장을 보내 주셔서 감사합니다. 스택 추적으로 무엇을 의미하는지 모르겠습니다. 내가 디버그를 클릭했는데,하지만 어떤 오류 메시지를주고 이클립스 콘솔은, 나는 잡기 (예외 전자)를 통해 오류 메시지를 가지고 .. 사전에 감사드립니다 Logged – robs

답변

0

예외 (java.lang.ClassCastException)를 보면 어떤 클래스를 다른 클래스에 캐스트하는 데 문제가 있습니다.

코드에서 요소를 캐스팅하는 이유를 이해하지 못했습니다 - 요소에 사용중인 getElementsByTagName 메서드가 있습니다. 여기를보세요 : http://developer.android.com/reference/org/w3c/dom/Element.html

모든 악의 뿌리입니다. Element와 Document 모두 Node 인터페이스를 구현하지만 Document는 구현하지 않습니다. Element - Element를 Document로 캐스팅 할 수없는 이유입니다.

어쨌든 expcetion 줄 번호는 정확한 오류 위치를 결정할 수 있습니다.

4

이 질문은 조금 오래된 것이지만, ClassCastException은 노드 목록의 요소를 android.sax.Element type rather than org.w3c.dom.Element;으로 캐스팅하려고 시도했기 때문에 발생합니다.

관련 문제