在我的一项活动中,我正在使用AsyncTask
。在doInBackground()
我正在调用各种方法。在其中一个方法中我得到一个异常,所以在catch块中我想在Toast中显示错误。
我知道我可以使用Log
,但我仍然喜欢Toast。
那么,如何在doInBackground()中使用Toast in AsyncTask?
答案 0 :(得分: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
}
}
答案 1 :(得分:11)
你可以在runOnUIThread()
中包裹Toast,但这不是最佳解决方案
发生错误时应在catch块中设置布尔标志,然后在onProgressUpdate()
,onPostExecute()
或任何其他具有UI访问权限的方法中显示适当的Toast,只要标志为{{1} }。
答案 2 :(得分:6)
将以下代码写在必须以doInBackground()
方法
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
Fragments
,则需要通过您的活动致电runOnUiThread(...)
: getActivity().runOnUiThread(...)
答案 3 :(得分:3)
您可以在方法中显示它,该方法可以访问UI线程,如onPreExecute()
,onProgressUpdate()
和onPostExecute()
答案 4 :(得分: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();
}
});
}
答案 5 :(得分:1)
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(), "Example for Toast", Toast.LENGTH_SHORT).show();
}
});
非常适合在doInBackground()方法中显示吐司
答案 6 :(得分:0)
activity.runOnUiThread(new Runnable() {
public void run()
{
Toast.makeText(activity, "Toast teaxt", Toast.LENGTH_SHORT).show();
}
});
答案 7 :(得分:0)
试试这段代码
void showError(final String err) {
runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(downloadprogress.this, err + "error in download", Toast.LENGTH_LONG)
.show();
}
});
}
答案 8 :(得分: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 "";
}