gpt4 book ai didi

java - Android - 如何在 ConnectionTimeout 上显示 Toast

转载 作者:行者123 更新时间:2023-12-01 18:48:10 27 4
gpt4 key购买 nike

我遇到以下问题:我的应用程序使用执行所有 HTTP 调用的函数。作为一个快速修复,我想在出现 ConnectionTimeout 时向用户显示一条 toast 消息。

问题是这个executeHttp()是从多个AsyncTasks调用的,我不知道如何获取所需的上下文

我读过一些有关 runOnUiThread 的内容,但这似乎对我也不起作用......

有什么想法吗?

谢谢!

更新:

我想要一个可以在我的 executeHttp() 函数中使用的解决方案,因为否则我必须在 100 个不同的地方添加此代码...这可能吗?

最佳答案

首先,实现一个方法来向您的 Activity 显示 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();
}
}

摘要:没有可用的上下文 -> 没有 toast

关于java - Android - 如何在 ConnectionTimeout 上显示 Toast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16808274/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com