2016-02-05 122 views
-2

我在運行應用程序時遇到了一個致命異常:main。它首先運行,但幾秒鐘就會崩潰。Android - java.lang.RuntimeException:無法從包中讀取輸入通道文件描述符

這裏是我的logcat:

java.lang.RuntimeException: Could not read input channel file descriptors from parcel. 
               at android.view.InputChannel.nativeReadFromParcel(Native Method) 
               at android.view.InputChannel.readFromParcel(InputChannel.java:148) 
               at android.view.IWindowSession$Stub$Proxy.addToDisplay(IWindowSession.java:752) 
               at android.view.ViewRootImpl.setView(ViewRootImpl.java:527) 
               at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:282) 
               at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) 
               at android.app.Dialog.show(Dialog.java:298) 
               at android.app.AlertDialog$Builder.show(AlertDialog.java:993) 
               at com.mobext.shakeys.ActivityMain$ProcessData.onPostExecute(ActivityMain.java:545) 
               at com.mobext.shakeys.ActivityMain$ProcessData.onPostExecute(ActivityMain.java:212) 
               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) 

裏面我ActivityMain.java:542在alrt.show(),這是其中的logcat點吧:

@Override 
    protected void onPostExecute(Boolean result) { 
     Log.i(TAG, "onPostExecute"); 
     super.onPostExecute(result); 
     if(result){ 

      Log.i(TAG, "TASK IS DONE"); 
      try { 
       PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); 
       app.saveToLastPref(ActivityMain.this, app.PREFS_PREV_VERSION, pInfo.versionName); 
      } catch (NameNotFoundException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      Intent intent = new Intent(getApplicationContext(), ActivityMenuPage.class); 
      startActivity(intent); 
      finish(); 
     }else{ 
      ActivityMain.this.deleteDatabase("DBSHAKEYS"); 
      Builder alrt = new AlertDialog.Builder(mcontext); 
      alrt.setMessage("Update failed. Please check your internet connection and try again."); 
      alrt.setPositiveButton("Okay", new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        finish(); 
       } 
      }); 
      alrt.show(); 
     } 
    } 

} 

而且在ActivityMain.java: 212:

public class ProcessData extends AsyncTask<Void, Void, Boolean> 
+0

您可能會在調用alrt.show()方法之前顯示一些'AlertDialog'。你有沒有檢查正確?生成器是你的自定義類嗎? –

回答

0

我認爲Builder是你現在使用的自定義類來顯示AlertDialog

以下是可能發生的事情

onPostExecute()方法,你的一些背景,一邊完成後,執行自動調用。然後它試圖使用Builder類,它可能正在被另一個進程使用,並仍在內存中運行。

那該怎麼解決呢?

  1. 回顧你的代碼,看看是否已被使用 生成器類所示的對話框。
  2. 只需將此行更改爲 Builder alrt = new AlertDialog.Builder(mcontext);即可,通常爲AlertDialog.Builder alrt = new AlertDialog.Builder(mcontext); 並查看是否有效。
+0

仍然不工作,先生。謝謝你的答案btw。 – RussVirtuoso

+0

@RussVirtuoso你的mContext是什麼?這是你的活動像'MyActivity.this'還是別的? –

+0

@RussVirtuoso只需調試您的應用程序放置'AlertDialog.Builder alrt =新的AlertDialog.Builder(MyActivity.this);'。這應該工作。 –

相關問題