2012-01-03 90 views
0

我在我的應用程序中使用異步任務。我正在預執行和doInBackground啓動一個進度對話框我調用一個函數,將從geocoder返回當前位置。如果當前位置不是可用我顯示一個對話框手動輸入的地方。但它變得崩潰時,對話框來了。我甚至不能在該功能使用結果強制close.Can任何1有這個解決方案問題..? 請幫助.. 這是我得到的錯誤..問題使用異步任務

01-03 09:45:36.216: E/AndroidRuntime(452): FATAL EXCEPTION: AsyncTask #1 
01-03 09:45:36.216: E/AndroidRuntime(452): java.lang.RuntimeException: An error occured while executing doInBackground() 
01-03 09:45:36.216: E/AndroidRuntime(452): at android.os.AsyncTask$3.done(AsyncTask.java:200) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
01-03 09:45:36.216: E/AndroidRuntime(452): at java.lang.Thread.run(Thread.java:1019) 
01-03 09:45:36.216: E/AndroidRuntime(452): Caused by: java.lang.RuntimeException:  Can't create handler inside thread that has not called Looper.prepare() 
01-03 09:45:36.216: E/AndroidRuntime(452): at android.os.Handler.<init>(Handler.java:121) 
01-03 09:45:36.216: E/AndroidRuntime(452): at android.widget.Toast.<init>(Toast.java:68) 
01-03 09:45:36.216: E/AndroidRuntime(452): at android.widget.Toast.makeText(Toast.java:231) 

我的異步任務是這樣的。

private class UpdateCity extends AsyncTask<String, Void, Void> { 
    ProgressDialog dialog = new ProgressDialog(this); 



    @Override 
    protected void onPreExecute() { 

     this.dialog.setMessage("Please wait for few seconds..."); 
     this.dialog.setTitle(""); 
     this.dialog.show(); 

    } 

    @Override 
    protected Void doInBackground(final String... args) { 

     checkCity(Cplacename);//my function 
     return null; 

    } 

    @Override 
    protected void onPostExecute(final Void unused) { 


     this.dialog.dismiss(); 
    } 

} 
+3

您沒有給我們任何代碼,也沒有logcat的堆棧跟蹤...我們如何幫助您? – 2012-01-03 04:10:59

+1

你可以添加你的異步任務代碼嗎?我猜你需要在線程啓動之前調用Looper.prepare。正如錯誤中指定的那樣。 – nala4ever 2012-01-03 04:22:13

+0

我想知道如何處理在doInBackground中執行的函數的異常。例如:敬酒 – yshak 2012-01-03 04:24:46

回答

3

無法創建內螺紋處理程序尚未調用 Looper.prepare()

從您的logcat上面的錯誤似乎您試圖upate從UI一個非UI線程。您應該使用runOnUiThread()從非UI線程更新您的UI。

Activity_name.this.runOnUiThread(new Runnable() { 
    public void run() { 
    checkCity(Cplacename); 
    } 
}); 
+0

Thankz ...它似乎是問題...所以我應該在哪裏寫上述代碼?在異步任務? – yshak 2012-01-03 04:36:13

+1

檢查我編輯的答案,只是把你的方法checkCity(Cplacename);在runOnUiThread()中。 – 2012-01-03 04:37:31

+0

它的工作...非常感謝您的幫助...您是一個真正的.. – yshak 2012-01-03 04:48:43

1

logcat referes一些Toast的後半部分。您是否在doInBackground()函數中顯示Toast?如果有的話,刪除它,它應該工作。請記住,Toast是一個UI元素。

+0

謝謝......「runOnUiThread」解決了我的問題.. – yshak 2012-01-04 07:33:44