Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AsyncTask类运行时错误:concurrent.FutureTask.finishCompletion_Java_Android_Android Asynctask - Fatal编程技术网

Java AsyncTask类运行时错误:concurrent.FutureTask.finishCompletion

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

我是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  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布局吗?