1

私のアプリケーションLogCatは、デバッグモードで実行しているときにこれを出力します。

HTTPGetリクエスト(文字列結果)から受信したXMLドキュメントを解析しようとしています。結果は文字列形式の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をandroid.sax.Element02-2019:39:48.326にキャストできません:E / AndroidRuntime(774):com.testingapp.MainActivity $ startLogin.onPostExecute(MainActivity.java:112)02-20 19: 39:48.326:E / AndroidRuntime(774):com.testingapp.MainActivity $ startLogin.onPostExecute(MainActivity.java:1)02-20 19:39:48.326:E / AndroidRuntime(774):android.os.AsyncTask .finish(AsyncTask.java:631)02-20 19:39:48.326:E / AndroidRuntime(774):android.os.AsyncTask.access $ 600(AsyncTask.java:177)02-20 19:39:48.326: E / AndroidRuntime(774):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):at android.os.Looper.loop(Looper.java:137)02-20 19 :39:48.326:E / AndroidRuntime(774):android.app.ActivityThread.main(ActivityThread.java:5039)02-20 19:39:48.326:E / AndroidRuntime(774):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):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internalで。 os.ZygoteInit.main(ZygoteInit.java:560)02-20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)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):atcom.android.internal。 os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)02 -20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)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):atcom.android.internal。 os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)02 -20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)326:E / AndroidRuntime(774):android.app.ActivityThread.main(ActivityThread.java:5039)02-20 19:39:48.326:E / AndroidRuntime(774):java.lang.reflect.Method.invokeNative (ネイティブメソッド)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):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os.ZygoteInit .main(ZygoteInit.java:560)02-20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)326:E / AndroidRuntime(774):android.app.ActivityThread.main(ActivityThread.java:5039)02-20 19:39:48.326:E / AndroidRuntime(774):java.lang.reflect.Method.invokeNative (ネイティブメソッド)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):com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os.ZygoteInit .main(ZygoteInit.java:560)02-20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)326:E / AndroidRuntime(774):java.lang.reflect.Method.invoke(Method.java:511)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)02- 20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)326:E / AndroidRuntime(774):java.lang.reflect.Method.invoke(Method.java:511)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os .ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)02-20 19:39:48.326:E / AndroidRuntime(774):com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)02- 20 19:39:48.326:E / AndroidRuntime(774):dalvik.system.NativeStart.main(ネイティブメソッド)

エラーをonPostExecuteAsyncTaskに集中させることができました。

@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();
                    }
        }

何が間違っているのかわかりませんか?

4

1 に答える 1

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オブジェクトにキャストしているため、クラスキャスト例外が発生します。

于 2013-02-20T23:26:35.670 に答える