2014-12-13 77 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