Android:从 doInBackground 返回简单字符串时出现奇怪错误

Android : Strange error when returning a simple string from doInBackground

这是有问题的 doInBackground 代码:-

@Override
    protected String doInBackground(Void... params) {


        try {
            jsonArray = LoadCacheAction();

            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject obj = jsonArray.getJSONObject(i);
                HttpResponse httpResponse = httpResponse = ((Globals) getApplication()).SendDataApache("employeeactions", obj);;

                if (httpResponse != null) {
                    int code = httpResponse.getStatusLine().getStatusCode();
                    if ((code == 200) || (code == 201)){
                        return "ok";
                    }
                    else if ((code == 400)){
                        ((Globals) getApplication()).WriteEventLogCache(((Globals) getApplication()).TodaysDate(), "3", "1", ((Globals) getApplication()).getIdUser(), "400 - Bad request error - Clocking Action");
                        return code + "";
                    }
                    else
                        return code + "";
                }
            }

            ((Globals) getApplication()).WriteEventLogCache(((Globals) getApplication()).TodaysDate(), "3", "1", ((Globals) getApplication()).getIdUser(), "Just Testing");

            return "error";

        } catch (Exception e) {
            ((Globals) getApplication()).WriteEventLogCache(((Globals) getApplication()).TodaysDate(), "3", "1", ((Globals) getApplication()).getIdUser(), e.getMessage());
            return "conIssue";
        }
    }

整个软件包在遇到 return 中的任何一个之前都能完美运行。当它这样做时,软件会完全崩溃。我试过删除方法中的所有内容,只是 return "ok" 但它仍然崩溃。

有没有人有任何建议,为什么因为我真的根本看不到它。

谢谢

史蒂夫

PostExecute 代码:-

protected void onPostExecute(String result) {
        if (pDialog.isShowing())
            pDialog.dismiss();

        if (result == "ok") {
            ((Globals) getApplication()).ClearCacheFile(((Globals) getApplication()).getActionCacheFileName());
        } else {
            if (result == "error") {
                Toast.makeText(getApplicationContext(),
                        "Clocking Error. Try Again !!!", Toast.LENGTH_LONG)
                        .show();
            } else {
                if (result == "conIssue") {
                    Toast.makeText(
                            getApplicationContext(),
                            "Server not connected. Data will be updated when connection will be available.",
                            Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(
                            getApplicationContext(),
                            "Clocking Error. Server connection problem !!!",
                            Toast.LENGTH_LONG).show();
                }
            }
        }
    }

这是崩溃发生时日志中显示的内容:-

08-28 09:19:28.271  22411-22411/com.pe_systems.unity.unityandroid E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.pe_systems.unity.unityandroid, PID: 22411
java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView{246c3ec6 V.E..... R......D 0,0-959,128} not attached to window manager
        at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:396)
        at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:322)
        at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116)
        at android.app.Dialog.dismissDialog(Dialog.java:341)
        at android.app.Dialog.dismiss(Dialog.java:324)
        at com.pe_systems.unity.unityandroid.Clocking.ClockingActivity$ServerConnectionTask.onPostExecute(ClockingActivity.java:408)
        at com.pe_systems.unity.unityandroid.Clocking.ClockingActivity$ServerConnectionTask.onPostExecute(ClockingActivity.java:357)
        at android.os.AsyncTask.finish(AsyncTask.java:636)
        at android.os.AsyncTask.access0(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

08-28 09:19:28.272 546-3362/? W/ActivityManager﹕强制整理activity 1 com.pe_systems.unity.unityandroid/.Main.MainActivity 08-2809:19:28.348 546-603/? I/OpenGLRenderer﹕初始化EGL,版本1.4

ClearCaheFile 代码:-

    public void ClearCacheFile(String fileName)
{
    File key = new File(getExternalCacheDir(), fileName);
    try {
        FileWriter writeKey = new FileWriter(key);

        BufferedWriter out = new BufferedWriter(writeKey);
        out.write("");
        out.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}

在我看来,出现这个错误是因为activity在onPostExecute(String result)方法运行时被销毁了。为避免这种情况,您应该在 activity 被销毁时取消所有 运行 AsyncTask。