Android-java.lang.RuntimeException:无法从包中读取输入通道文件描述符
我在运行应用程序时遇到了一个致命的异常:main。它先运行,但几秒钟后崩溃 这是我的日志:Android-java.lang.RuntimeException:无法从包中读取输入通道文件描述符,java,android,android-studio,Java,Android,Android Studio,我在运行应用程序时遇到了一个致命的异常:main。它先运行,但几秒钟后崩溃 这是我的日志: java.lang.RuntimeException: Could not read input channel file descriptors from parcel. at android.view.InputChannel.nativeReadFromParcel(Native Method)
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)
在alrt.show中的我的ActivityMain.java:542中,这是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>
我认为Builder是您现在用来显示AlertDialog的自定义类
下面是可能发生的事情
onPostExecute方法是在某个后台进程完成执行后自动调用的。然后它尝试使用Builder类,该类当前可能正被另一个进程使用,并且仍在内存中运行
那怎么解决呢
查看您的代码,并查看是否已使用显示该对话框
生成器类。
只要换一行就行了
Builder alrt=新建AlertDialog.Buildermcontext;正常情况下AlertDialog.Builder alrt=new AlertDialog.Buildermcontext;
看看这是否有效。
在调用alrt.show方法之前,可能已经显示了一些AlertDialog。你检查过了吗?生成器是您的自定义类吗?@RussVirtuoso您的mContext是什么?这是您的活动,与MyActivity.this或其他类似吗?@RussVirtuoso只需调试您的应用程序,将AlertDialog.Builder alrt=new AlertDialog.BuilderMyActivity.this;。这应该行得通。