2012-05-04 57 views
0

我試圖寫if if條件的WiFi連接,但它拋出錯誤。android - showDialog();錯誤

logcat的

05-04 13:32:51.227: E/WindowManager(4355): Activity com.smartmenu.SplashActivity has leaked window [email protected] that was originally added here 
05-04 13:32:51.227: E/WindowManager(4355): android.view.WindowLeaked: Activity com.smartmenu.SplashActivity has leaked window [email protected] that was originally added here 
05-04 13:32:51.227: E/WindowManager(4355): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:343) 
05-04 13:32:51.227: E/WindowManager(4355): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:245) 
05-04 13:32:51.227: E/WindowManager(4355): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:193) 
05-04 13:32:51.227: E/WindowManager(4355): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:118) 
05-04 13:32:51.227: E/WindowManager(4355): at android.view.Window$LocalWindowManager.addView(Window.java:537) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.Dialog.show(Dialog.java:274) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.AlertDialog$Builder.show(AlertDialog.java:932) 
05-04 13:32:51.227: E/WindowManager(4355): at com.smartmenu.SplashActivity.showDialog(SplashActivity.java:205) 
05-04 13:32:51.227: E/WindowManager(4355): at com.smartmenu.SplashActivity.onCreate(SplashActivity.java:93) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.Activity.performCreate(Activity.java:4465) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.ActivityThread.access$600(ActivityThread.java:122) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
05-04 13:32:51.227: E/WindowManager(4355): at android.os.Handler.dispatchMessage(Handler.java:99) 
05-04 13:32:51.227: E/WindowManager(4355): at android.os.Looper.loop(Looper.java:137) 
05-04 13:32:51.227: E/WindowManager(4355): at android.app.ActivityThread.main(ActivityThread.java:4340) 
05-04 13:32:51.227: E/WindowManager(4355): at java.lang.reflect.Method.invokeNative(Native Method) 
05-04 13:32:51.227: E/WindowManager(4355): at java.lang.reflect.Method.invoke(Method.java:511) 
05-04 13:32:51.227: E/WindowManager(4355): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
05-04 13:32:51.227: E/WindowManager(4355): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
05-04 13:32:51.227: E/WindowManager(4355): at dalvik.system.NativeStart.main(Native Method) 

代碼

if(str.equals("")) 
     {       
      ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
     NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
     if (mWifi.isConnected()) { 
      new Handler().postDelayed(new Runnable(){ 
       @Override 
       public void run() { 
       /* Create an Intent that will start the Menu-Activity.*/ 
       Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class); 
       SplashActivity.this.startActivity(mainIntent); 
       SplashActivity.this.finish(); 
       } 
      }, SPLASH_DISPLAY_LENGHT); 
     } 
     else 
     {     
      showDialog(); 
     } 
     } 
     else 
     { 
      ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); 
      NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);  
      if (mWifi.isConnected()) {     
        new Handler().postDelayed(new Runnable(){ 
         @Override 
         public void run() { 
         /* Create an Intent that will start the Menu-Activity.*/ 
         Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class); 
         SplashActivity.this.startActivity(mainIntent); 
         SplashActivity.this.finish(); 
         } 
        }, SPLASH_DISPLAY_LENGHT); 
       new DownloadFilesTask().execute(); 
      } 
      else 
      {     
       showDialog(); 
      } 

的ShowDialog();

private void showDialog() 
    { 
     AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
     dialog.setTitle("Attention"); 
     dialog.setMessage("No Internet Connection. Please enable the wifi. "); 
     dialog.setPositiveButton("OK", new 
       DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, 
       int whichButton) 
       { 
        new Handler().postDelayed(new Runnable(){ 
         @Override 
         public void run() { 
         /* Create an Intent that will start the Menu-Activity.*/ 
         Intent mainIntent = new Intent(SplashActivity.this,MainActivity.class); 
         SplashActivity.this.startActivity(mainIntent); 
         SplashActivity.this.finish(); 
         } 
        }, SPLASH_DISPLAY_LENGHT); 
       } 
      }); 

     dialog.show(); 
    } 
+2

你可以發佈你的代碼出錯的地方嗎? –

+1

生成此錯誤的代碼將對您有所幫助 – CAA

+0

您無法將適當的上下文傳遞給對話框。 – RobinHood

回答

0

嘗試使用的AsyncTask,並顯示您在onPostExecute對話框。在onPreExecute上顯示你的閃屏。

+0

你使用這個解決方案嗎? –

0

您試圖在退出活動後顯示對話框。

解決方法是在您退出活動之前創建的對話框上調用dismiss(),例如,在onPause()中。

視圖具有對其父上下文的引用(從構造函數參數中獲取)。如果您在不銷燬對話框和其他動態創建的視圖的情況下離開活動,它們仍然持有對您的活動的引用(如果您將此引用創建爲上下文:如新ProgressDialog(this)),則GC不能收集它,導致內存泄漏。

原來的答案是HERE由Alex

+0

@ chinna_82你有soln? – vnshetty

+0

不是真的....我試圖包括解僱showdialog()..但它不工作.. –