在我的一項活動中,我使用的是AsyncTask
。在doInBackground()
我打電話給各種方法。在其中一個方法中,我收到一個異常,所以在catch塊中,我想在Toast中顯示錯誤。 我知道我可以用Log
,但我仍然比較喜歡吐司。 那麼,如何在doInBackground()中的AsyncTask中使用Toast?如何在doInBackground的AsyncTask中顯示吐司
回答
您可以將烤麪包包裹在runOnUIThread()
中,但這不是最佳解決方案。
當發生錯誤時,您應該在catch塊中設置一個布爾標誌,然後在onProgressUpdate()
,onPostExecute()
或任何其他具有UI訪問權限的方法中,在標誌爲true
時顯示相應的Toast。
我不明白,要麼...... +1了 – Ahmad
@Ahmad我回來了,因爲我們畢竟是對的。 – Sam
應將哪個上下文傳遞給toast ** getBaseContext()**或** getApplication()**上下文? – hrishikesh
你可以在一個方法,能夠訪問像onPreExecute()
,onProgressUpdate()
從doInBackground onPostExecute()
回報
protected String doInBackground(String... params){
//some code
try{
//some code
}catch(Exception e){
return "Exception Caught";
}
return someValidResult;
}
protected void onPostExecute(String result){
if(result.equalsIgnoreCase("Exception Caught")){
//Display Toast
}else{
// // whatever you wana do with valid result
}
}
編寫下面的代碼,你必須表明敬酒UI線程顯示它在doInBackground()
方法
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
- BTW:如果你正在使用
Fragments
,你需要通過你的活動來調用runOnUiThread(...)
:
getActivity().runOnUiThread(...)
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
工作完全正常,以顯示doInBackground吐司()方法
創建處理程序對象並使用它執行所有的Toast消息。
@Override
protected Void doInBackground(Void... params) {
Handler handler=new handler();
handler= new Handler(context.getMainLooper());
handler.post(new Runnable(){
public void run(){
Toast.makeText(context, "Created a server socket",Toast.LENGTH_LONG).show();
}
});
}
activity.runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show();
}
});
試試這個代碼
void showError(final String err) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG)
.show();
}
});
}
- 1. 吐司不在asynctask中顯示
- 2. 如何在asyncTask中顯示吐司消息doingbackground或onPostExecute
- 3. Android如何顯示吐司?
- 4. 如何顯示數組中的吐司
- 5. 使用doInBackground(AsyncTask)時不能出現吐司
- 6. 吐司不顯示
- 7. 吐司不顯示
- 8. 解僱ProgressDialog和線程的AsyncTask顯示吐司
- 9. 在任何情況下顯示吐司
- 10. 在當前服務中顯示吐司
- 11. 吐司沒有在catch catch中顯示
- 12. 吐司無法顯示
- 13. 吐司沒有顯示
- 14. 無法顯示吐司
- 15. 顯示java.lang.NullPointerException展出吐司
- 16. 如何在Java,Android上的Runnable類中顯示吐司?
- 17. 如何自定義吐司在Android中的顯示時間?
- 18. 在鍵盤上方顯示吐司
- 19. 字符串不顯示在android吐司
- 20. 如何在吐司中顯示數組列表項?
- 21. 如何在第二個java文件中顯示吐司?
- 22. AsyncTask progressdialog不顯示,doInBackground阻止UI
- 23. 計劃的吐司顯示多次
- 24. 單擊列表後的顯示吐司
- 25. 爲什麼我的吐司不顯示
- 26. 禁用吐司的異步顯示
- 27. 如何顯示吐司在不同的2位
- 28. 如何在doinbackground asynctask中添加tabbar android
- 29. Android如何在連接上顯示吐司時間
- 30. 如何在啓動畫面上顯示吐司
你爲什麼不從doInBackground(重新調整誤差onPostExecute),然後使這個錯誤來自onPostExecute –
舉杯您不能修改從UI doInBackground()方法嘗試返回一些結果,並在onPostExecute()方法中測試該結果,如果是,則顯示Toast – Houcine
@Sam:簡單的人!我沒有投票失敗,我剛剛添加了我的評論,我知道你可以在'doInBackground()'中授予訪問權限,但不建議這樣做,如果是這樣,那麼爲什麼有方法'onProgressUpdate )'和'onPostExecute()'? – Houcine