2013-02-20 45 views
1

我的应用logcat的崩溃给了我这一点的说:的Android应用程序保持在XML解析

我试图解析XML从HTTPGET请求接收文件(字符串结果)结果是在字符串中的XML格式。只是不能让它把字符串值进行测试对登录。

02-20 19:39:48.326:E/AndroidRuntime(774):致命异常:主02-20 19:39:48.326:E/AndroidRuntime(774):java.lang.ClassCastException: org.apache.harmony.xml.dom.ElementImpl can not be cast to android.sax.Element 02-20 19:39:48.326:E/AndroidRuntime(774):at com.testingapp.MainActivity $ startLogin.onPostExecute(MainActivity .java:112) 02-20 19:39:48.326:E/AndroidRuntime(774):at com.testingapp.MainActivity $ startLogin.onPostExecute(MainActivity.java:1) 02-20 19:39:48.326: E/AndroidRuntime(774):at android.os.AsyncTask.finish(AsyncTask.java:631)02-20 19:39:48 .326: E/AndroidRuntime(774):at android.os.AsyncTask.access $ 600(AsyncTask.java:177)02-20 19:39:48.326:E/AndroidRuntime(774):at android.os .AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:644) 02-20 19:39:48.326:E/AndroidRuntime(774):at android.os.Handler.dispatchMessage(Handler.java:99)02-20 19:39:48.326:E/AndroidRuntime(774):在 android.os.Looper.loop(Looper.java:137)02-20 19:39:48.326: E/AndroidRuntime(774):at android。 app.ActivityThread.main(ActivityThread.java:5039)02-20 19:39:48.326:E/AndroidRuntime(774):at java.lang.reflect.Method.invokeNative(Native Method)02-20 19:39:48.326:E/AndroidRuntime(774):at java.lang.reflect.Method.invoke(Method.java:511)02-20 19:39:48.326: E/AndroidRuntime(774):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793) 02-20 19:39:48.326:E/AndroidRuntime(774):at com.android.internal.os.ZygoteInit。主(ZygoteInit.java:560)02-20 19:39:48.326:E/AndroidRuntime(774):在 dalvik.system.NativeStart.main(本机方法)

我能够把重点放在错误到我的onPostExecute AsyncTask:

@Override 
       protected void onPostExecute(String result) { 

       int z = 0; 
       String xml = result; 
       String KEY_ITEM = "Response"; 
       String KEY_SUCCESS = "Success"; 
       String KEY_FAIL = "Fail"; 
       String KEY_UID = "UID"; 

        Document doc = getDomElement(xml); 

        if(xml != null) 
        { 
         NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
         for (int i = 0; i < nl.getLength(); i++) 
         { 
         Element e = (Element) nl.item(i); 
         String successString = getValue(e,KEY_SUCCESS); 
         String UIDString = getValue(e,KEY_UID); 
         String failString = getValue(e,KEY_FAIL); 

         if(failString.equals("Fail")){ 
          int duration = Toast.LENGTH_LONG; 
          Toast toast = Toast.makeText(MainActivity.this, "Please check username and password.", duration); 
          toast.setGravity(Gravity.TOP|Gravity.RIGHT, 0, 0); 
          toast.show(); 
         } 
         else{ 
          if(successString.equals("Success")){ 
           Intent intent = new Intent (MainActivity.this, HomeActivity.class); 
           startActivity(intent); 
           } 
          } 
         } 
        } 
        else 
        { 
         Toast toast = Toast.makeText(MainActivity.this, "No Connection to Retrieve Data.", Toast.LENGTH_LONG); 
         toast.show(); 
        } 
     } 

我不明白我在做什么错?

+0

看起来是一个ClassCastException ...你能发布你的XML数据吗?上述 – 2013-02-20 20:20:15

+0

成功 Keeano 2013-02-20 20:35:55

+0

是从服务的输出。 – Keeano 2013-02-20 20:36:14

回答

2

这里的问题... 更改此

public String getValue(Element item, String str) { 
    NodeList n = ((Document) item).getElementsByTagName(str); 
    return getElementValue(n.item(0)); 
} 

public String getValue(Element item, String str) { 
    NodeList n = item.getElementsByTagName(str); // Removed Typecast 
    return getElementValue(n.item(0)); 
} 

您铸造Element.getElementsByTagName(STR)返回一个NodeList对象。 但您将它转换为Document对象,因此是类转换异常。

+0

已经停留了一段时间,这有助于出这么多,谢谢! – Keeano 2013-02-21 00:46:23