我有以下问题:我的应用程序使用了执行所有HTTP调用的函数。作为快速解决方案,我想在出现ConnectionTimeout
时向用户显示敬酒消息。
问题在于,该executeHttp()是从多个AsyncTasks
调用的,我不知道如何获取所需的context
。
我读了一些有关runOnUiThread
的内容,但这似乎对我也不起作用...
有任何想法吗?
谢谢!
更新:
我想有一个可以在我的executeHttp()
函数中使用的解决方案,因为否则我确实将此代码添加到了100个不同的地方...这可能吗?
最佳答案
首先,实现一种方法向您的活动展示敬酒:
class MyActivity extends Activity {
// some stuff
public void showToast(String text, int duration) {
Toast toast = Toast.makeText(this.getBaseContext(), text, duration);
toast.show();
}
}
让您的AsyncTask持有对活动的引用,然后可以在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();
}
}
摘要:无可用上下文->无吐司