今天我在执行 AsyncTask 时遇到了 android 应用程序中的问题。异常日志是 -
FATAL EXCEPTION: AsyncTask #1
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:299)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
at java.util.concurrent.FutureTask.run(FutureTask.java:239)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:838)
Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Void[]
at com.android.demo.DashBoardActivity$3.doInBackground(DashBoardActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:234)
我不明白错误是什么以及应用强制关闭的原因。 这种情况不会发生在第一次运行后,而是第二次运行应用程序会导致异常。
提前致谢。
已编辑-
我在 DashBoardActivity 中使用以下方法注册到 GCM-
public void registerToGCM(){
try{
GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);
registerReceiver(mHandleMessageReceiver, new IntentFilter(
AppConstents.DISPLAY_MESSAGE_ACTION));
final String regId = GCMRegistrar.getRegistrationId(this);
if (regId.equals("")) {
GCMRegistrar.register(this, AppConstents.SENDER_ID);
} else {
if (GCMRegistrar.isRegisteredOnServer(this)) {
Toast.makeText(getApplicationContext(), "Already registered with GCM", Toast.LENGTH_LONG).show();
} else {
final Context context = this;
final AsyncTask mRegisterTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
GCMServerUtilities.register(context,regId);
return null;
}
@Override
protected void onPostExecute(Void result) {
// mRegisterTask = null;
}
};
mRegisterTask.execute(null, null, null);
}
}
}
catch(Exception e){
e.printStackTrace();
}
}
最佳答案
可以通过三种方式解决:
1:
final AsyncTask mRegisterTask = new AsyncTask<Object, Void, Void>() {.....
protected Void doInBackground(Object... params) {...
mRegisterTask.execute();
2:
final AsyncTask<Void, Void, Void> mRegisterTask = new AsyncTask<Void, Void, Void>() {.....
mRegisterTask.execute();
3:
final AsyncTask mRegisterTask = new AsyncTask<Void, Void, Void>() {.....
Void[] param = null;
mRegisterTask.execute(param);
关于android - 致命异常 : AsyncTask,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24136126/