2014-12-13 74 views
-1

在机器人即时通讯新的,试图让简单的程序,可以在的AsyncTask类印刷可变 这里是我的代码的AsyncTask类运行时错误:concurrent.FutureTask.finishCompletion

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) 
+1

你传递一个空的上下文来秀方法 – 2014-12-13 05:43:13

+0

@Pramod亚达夫然后我应该通过什么?任何解决方案将帮助我完成我的项目感谢 – 2014-12-13 05:47:03

+0

你的asynctask是一个活动的内部类或一个单独的类 – 2014-12-13 05:50:31

回答

2

移动你的节目吐司代码中runOnUiThread,如:

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     show(c, ctx); 
    } 
}); 
+0

@ Haresh Chhelana感谢它帮助我,它为我节省时间!你可以告诉我什么是doig这个函数'runOnUiThread'? 我正在制作基于Web的程序,我需要帮助。 – 2014-12-13 12:47:29

+1

@AshuKumar,doInBackground在外部UI线程上运行,所以如果你想做一些UI显示消息,比如显示消息,那么你可以使用runOnUiThread。 – 2014-12-13 12:51:44

+0

@ Haresh Chhelana我明白了,现在我继续使用代码如果我必须执行任何基于Web的代码,我应该如上所述做什么? – 2014-12-13 13:14:21

1

我GUE ss问题是你试图不是从主线程创建Toast。 您必须创建一个handlerRunnable,并使用handler.post()

例如

Runnable showToast = new Runnable() { 
    public void run() { 
     // Create your Toast here or whatever you want 
    } 
} 
+0

感谢您的帮助,它帮助我 – 2014-12-13 12:48:18