Java AsyncTask类运行时错误:concurrent.FutureTask.finishCompletion
我是android新手,正在尝试制作一个简单的程序,可以在AsyncTask类中打印变量 这是我的密码Java AsyncTask类运行时错误:concurrent.FutureTask.finishCompletion,java,android,android-asynctask,Java,Android,Android Asynctask,我是android新手,正在尝试制作一个简单的程序,可以在AsyncTask类中打印变量 这是我的密码 int a,b,c; @Override protected String doInBackground(String... arg0) { // TODO Auto-generated method stub a =10; b=10; c=a+b; Context ctx = null; show(c, ctx ); return null; } public voi
int a,b,c;
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
a =10;
b=10;
c=a+b;
Context ctx = null;
show(c, ctx );
return null;
}
public void show(int c2 ,Context c) {
// TODO Auto-generated method stub
Toast.makeText(c, "AsyncTask classs + c2 ", Toast.LENGTH_SHORT).show();
}
运行这个程序后,我得到运行时错误
这里是我们的LogCat文件视图
Process: com.example.asycclass, PID: 2539
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:200)
at android.os.Handler.<init>(Handler.java:114)
at android.widget.Toast$TN.<init>(Toast.java:327)
at android.widget.Toast.<init>(Toast.java:92)
at android.widget.Toast.makeText(Toast.java:241)
at com.example.asycclass.MainActivity$AttemptLogin.show(MainActivity.java:74)
at com.example.asycclass.MainActivity$AttemptLogin.doInBackground(MainActivity.java:65)
at com.example.asycclass.MainActivity$AttemptLogin.doInBackground(MainActivity.java:1)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
Process:com.example.asycclass,PID:2539
java.lang.RuntimeException:执行doInBackground()时出错
在android.os.AsyncTask$3.done(AsyncTask.java:300)
位于java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
位于java.util.concurrent.FutureTask.setException(FutureTask.java:222)
位于java.util.concurrent.FutureTask.run(FutureTask.java:242)
在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
运行(Thread.java:841)
原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
android.os.Handler.(Handler.java:200)
位于android.os.Handler.(Handler.java:114)
在android.widget.Toast$TN.(Toast.java:327)
在android.widget.Toast.(Toast.java:92)
位于android.widget.Toast.makeText(Toast.java:241)
位于com.example.asycclass.MainActivity$AttemptLogin.show(MainActivity.java:74)
在com.example.asycclass.MainActivity$AttemptLogin.doInBackground(MainActivity.java:65)上
在com.example.asycclass.MainActivity$AttemptLogin.doInBackground(MainActivity.java:1)上
在android.os.AsyncTask$2.call(AsyncTask.java:288)
位于java.util.concurrent.FutureTask.run(FutureTask.java:237)
我想问题在于您试图创建的是一个Toast
而不是从主线程。
您必须为此创建处理程序
和可运行
,并使用handler.post()
比如说
Runnable showToast = new Runnable() {
public void run() {
// Create your Toast here or whatever you want
}
}
将show Toast代码移到Runonuith中,如下所示:
runOnUiThread(new Runnable() {
@Override
public void run() {
show(c, ctx );
}
});
您正在向节目传递空上下文method@Pramod雅达,那我该通过什么?任何解决方案都将帮助我完成项目,感谢您的asynctask是活动的内部类或单独的类asynctask是MainActivity的内部类,然后使用show(c,MainActivity.this);代替展览(c,ctx);@Haresh Chhelana谢谢它帮助我,它节省了我的时间!你能告诉我这个函数的作用是什么吗?我正在制作一个需要帮助的基于web的程序。@AshuKumar,doInBackground是在外部UI线程上运行的,所以如果你想执行一些UI任务,比如显示消息,那么你可以使用runOnUiThread。@Haresh Chhelana我知道了,现在,我将继续编写代码,如果我必须执行任何基于web的代码,我应该按照上面提到的那样执行吗?我将明确阅读,我从3天开始尝试在AsyncTask类中加载新布局,您能告诉我如何在
AsyncTask
类中加载新的android布局吗?