在我正在使用的一项活动中AsyncTask
。在doInBackground()
我正在调用各种方法。在其中一种方法中,我遇到了异常,因此在 catch 块中,我想在 Toast 中显示错误。我知道我可以使用Log
,但我仍然更喜欢 Toast。那么,如何在 doInBackground() 的 AsyncTask 中使用 Toast?
问问题
24376 次
9 回答
17
从 doInBackground 返回为
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
}
}
于 2012-12-09T18:41:45.820 回答
13
你可以把 Toast 包起来,runOnUIThread()
但这不是最好的解决方案。当发生错误时,您应该在 catch 块中设置一个布尔标志,
然后在标志为 时显示适当的 Toast或任何其他具有 UI 访问权限的方法。onProgressUpdate()
onPostExecute()
true
于 2012-12-09T18:33:10.980 回答
6
编写以下代码,您必须在doInBackground()
方法中显示 toast
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
- 顺便说一句:如果您正在使用
Fragments
,则需要runOnUiThread(...)
通过您的活动来调用:
getActivity().runOnUiThread(...)
于 2013-11-20T13:37:40.240 回答
3
您可以在一个方法中显示它,该方法可以访问 UI 线程,onPreExecute()
例如onProgressUpdate()
onPostExecute()
于 2012-12-09T18:38:00.090 回答
3
创建一个处理程序对象并使用它执行所有 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();
}
});
}
于 2014-06-03T08:29:59.843 回答
1
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
在 doInBackground() 方法中显示吐司的工作非常好
于 2014-02-12T10:27:31.417 回答
0
activity.runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show();
}
});
于 2015-07-14T05:32:09.693 回答
0
试试这个代码
void showError(final String err) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG)
.show();
}
});
}
于 2015-08-05T06:43:35.897 回答
0
如果你必须声明任何与 Thread 相关的东西,那么它必须在 runOnUiThread() 方法之外,那么只有它会执行,
@Override
protected String doInBackground(String... strings) {
for(int i=0; i<10; i++) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast "+i, Toast.LENGTH_SHORT).show();
}
});
try {
Thread.sleep(10);
} catch (Exception e) {}
}
return "";
}
于 2020-01-05T13:49:08.090 回答