2013-06-25 36 views
1

我有一些問題。有時當我嘗試運行我的應用程序時,它會被迫關閉。我不知道爲什麼會發生。這裏是我的源代碼。爲什麼我的應用程序有時在早期啓動時出錯?

AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     alert.setCancelable(false); 
     //AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     ..... 
     alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       no_pasien = no_pas.getText().toString(); 
       new LoginProses().execute(); 
       ..... 
     alert.show(); 

class LoginProses extends AsyncTask<String, String, String> { 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     ...... 
    } 

    protected String doInBackground(String... args) { 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("no_pasien", no)); 

     JSONObject json = jsonParser.makeHttpRequest(url_login, 
       "POST", params); 
     try { 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // successfully created product 
       pasien = json.getJSONArray("pasien"); 
       JSONObject c = pasien.getJSONObject(0); 
       int id = c.getInt("id"); 

       new Temporary().setIdPasien(id); 

       Intent goMainAct = new Intent(); 
//     goMainAct.putExtra("id", id); 
       goMainAct.setClass(Login.this, MainActivity.class); 
       finish(); 
       startActivity(goMainAct); 
      } else { 
       // failed to create product 
       Intent getReload = getIntent(); 
       getReload.putExtra("status", 1); 
       finish(); 
       startActivity(getReload); 
      } 

     } catch (JSONException e) { 
      if(pDialog.isShowing()){ pDialog.dismiss(); } 
     } 

     return null; 
    } 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog once done 
     pDialog.dismiss(); 
    } 
} 

這裏是我的問題的日誌錯誤:

//HERE IS THE LOG: 
06-25 22:57:23.836: E/WindowManager(7630): Activity com.iteadstudio.Login has leaked window [email protected] that was originally added here 
06-25 22:57:23.836: E/WindowManager(7630): android.view.WindowLeaked: Activity com.iteadstudio.Login has leaked window  [email protected] that was originally added here 
06-25 22:57:23.836: E/WindowManager(7630): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:344) 
06-25 22:57:23.836: E/WindowManager(7630): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:267) 
06-25 22:57:23.836: E/WindowManager(7630): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:215) 
06-25 22:57:23.836: E/WindowManager(7630): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:140) 
06-25 22:57:23.836: E/WindowManager(7630): at android.view.Window$LocalWindowManager.addView(Window.java:537) 
06-25 22:57:23.836: E/WindowManager(7630): at android.app.Dialog.show(Dialog.java:278) 
06-25 22:57:23.836: E/WindowManager(7630): at com.iteadstudio.Login$LoginProses.onPreExecute(Login.java:122) 
06-25 22:57:23.836: E/WindowManager(7630): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:561) 
06-25 22:57:23.836: E/WindowManager(7630): at android.os.AsyncTask.execute(AsyncTask.java:511) 
06-25 22:57:23.836: E/WindowManager(7630): at com.iteadstudio.Login$3.onClick(Login.java:95) 
06-25 22:57:23.836: E/WindowManager(7630): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) 
06-25 22:57:23.836: E/WindowManager(7630): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-25 22:57:23.836: E/WindowManager(7630): at android.os.Looper.loop(Looper.java:137) 
06-25 22:57:23.836: E/WindowManager(7630): at android.app.ActivityThread.main(ActivityThread.java:4441) 
06-25 22:57:23.836: E/WindowManager(7630): at java.lang.reflect.Method.invokeNative(Native Method) 
06-25 22:57:23.836: E/WindowManager(7630): at java.lang.reflect.Method.invoke(Method.java:511) 
06-25 22:57:23.836: E/WindowManager(7630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
06-25 22:57:23.836: E/WindowManager(7630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
06-25 22:57:23.836: E/WindowManager(7630): at dalvik.system.NativeStart.main(Native Method) 
06-25 22:57:23.946: D/dalvikvm(7630): GC_CONCURRENT freed 782K, 6% free 14319K/15203K, paused 4ms+3ms 
06-25 22:57:23.976: D/AndroidRuntime(7630): Shutting down VM 
06-25 22:57:23.976: W/dalvikvm(7630): threadid=1: thread exiting with uncaught exception  (group=0x40ab4210) 
06-25 22:57:23.986: E/AndroidRuntime(7630): FATAL EXCEPTION: main 
06-25 22:57:23.986: E/AndroidRuntime(7630): java.lang.IllegalArgumentException: View not attached to window manager 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:587) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:324) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:151) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.app.Dialog.dismissDialog(Dialog.java:321) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.app.Dialog$1.run(Dialog.java:119) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.app.Dialog.dismiss(Dialog.java:306) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at com.iteadstudio.Login$LoginProses.onPostExecute(Login.java:177) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at com.iteadstudio.Login$LoginProses.onPostExecute(Login.java:1) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.os.AsyncTask.finish(AsyncTask.java:602) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.os.AsyncTask.access$600(AsyncTask.java:156) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.os.Looper.loop(Looper.java:137) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at android.app.ActivityThread.main(ActivityThread.java:4441) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
06-25 22:57:23.986: E/AndroidRuntime(7630):  at dalvik.system.NativeStart.main(Native Method) 
+0

是這段代碼在你的onCreate? –

+0

檢查這[問題](http://stackoverflow.com/questions/2850573/activity-has-leaked-window-that-was-originally-added) –

+0

@ Mr.Me關於警報生成器是的。 – Hendra

回答

0

你可能會得到JSONException

catch (JSONException e) { 
     if(pDialog.isShowing()){ pDialog.dismiss(); } 

解僱的對話,你不能在onPostExecute再次駁回。

+0

所以在onPostExecute我必須添加相同的代碼?我的意思是像 if(pDialog.isShowing()){pDialog.dismiss(); } – Hendra

+0

PostExecute將總是被調用,所以它只是在那裏,catch塊應該用來處理異常,例如通知用戶有問題。 – Gustek

0

看起來您正試圖在您的活動處於前景中之前顯示一個對話框。確保您的活動位於前臺後顯示對話框。您可以嘗試在mainActivity的onResume()之後啓動asyncTask。

+0

我如何知道或確定該對話框處於前景? – Hendra

+0

您正在將alertDialog附加到您的活動,並且該活動不在foreground,直到OnResume被調用。由於您在onCreate()中啓動了asyncTask,因此它會嘗試在尚未附加窗口的窗口上顯示alertDialog。 – deepdroid

+0

所以,我需要移動onResume()中的警報對話框? – Hendra

0

的問題是,你要附加到一個窗口,還沒有準備好,將你的警告對話框代碼添加到您的onResume功能,你應該罰款

@Override 
protected void onResume(){ 
     super.onResume(); 
     AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     alert.setCancelable(false); 
     ..... 
     alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
      no_pasien = no_pas.getText().toString(); 
      new LoginProses().execute(); 
      ..... 
     alert.show(); 
} 
相關問題