2015-08-28 52 views
-2

一個簡單的字符串時,這是有問題的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"; 
     } 
    } 

整個軟件完美的作品的權利,直到它擊中的回報中的任何一個。當它這樣做時,軟件完全崩潰。我試着拿出方法中的所有東西,只是返回「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.access$500(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:強制整理活動1 com.pe_systems.unity.unityandroid/.Main.MainActivity 08-28 09: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(); 
    } 
} 
+0

@你可以發佈你的文章執行方法 – Vishwa

+0

發佈你的日誌。 – Pankaj

+0

爲問題添加了後執行代碼。 – MagicWand

回答

1

在我看來,這是因爲onPostExecute(字符串結果)方法運行時的活動被破壞,就會出現此錯誤。爲了避免這種情況,應該在活動被銷燬時取消所有正在運行的AsyncTask。

+0

對我忍無可忍 - 這對我來說仍然是一個新的東西。我會取消任務,然後在執行後返回或取消任務嗎? – MagicWand

+1

- 在您的活動中創建一個字段以保持對AsyncTask的引用: private YourAsyncTask mAsyncTask; - 執行AsyncTask: mAsyncTask = new YourAsyncTask(); mAsyncTask.execute(); - 覆蓋的onDestroy()的活動的方法: 公共無效的onDestroy(){ 如果(!mAsyncTask = NULL && mAsyncTask.getStatus()== AsyncTask.Status.RUNNING){ mAsyncTask.cancel(真); } } –

+0

謝謝你 - 這是固定的,我也學到了一些東西。 – MagicWand