我有以下问题:我的应用程序使用一个执行所有HTTP调用的函数。作为一个快速修复,我想在有ConnectionTimeout
时向用户显示一个Toast消息。
问题是这个executeHttp()是从几个AsyncTasks
调用的,我无法弄清楚如何获得所需的context
。
我读了一些关于runOnUiThread
的内容,但这对我来说似乎也没有用......
有什么想法吗?
谢谢!
更新
我想要一个可以在我的executeHttp()
函数中使用的解决方案,因为我已经在100个不同的地方添加了这个代码......这可能吗?
答案 0 :(得分:4)
首先,实施一个方法来显示您活动的Toast:
class MyActivity extends Activity {
// some stuff
public void showToast(String text, int duration) {
Toast toast = Toast.makeText(this.getBaseContext(), text, duration);
toast.show();
}
}
让你的AsyncTask保存对activty的引用,然后可以在onProgressUpdate方法中调用它:
class MyAsyncTask extends AsyncTask {
MyActivity activity;
public MyAsyncTask(MyActivity a)
this.activity = a;
}
@Override
protected Object doInBackground(String... params) {
try {
// do your stuff here
} catch (ConnectionTimeoutException e) {
publishProgress("timeout");
}
@Override
protected void onProgressUpdate(String... values) {
if(values[0].equals("timeout")
activity.showToast("Ups, we have a timeout!", Toast.LENGTH_LONG); }
}
}
}
如果你想在executeHttp()方法中使用它,你必须将Context传递给它才能显示Toast:
public ReturnValue executeHttp(Context context) {
try {
// ...
} catch(ConnectionTimeoutException e) {
Toast t = Toast.makeToast(context, message, duration);
t.show();
}
}
摘要:没有可用的背景信息 - >没有吐司