【发布时间】:2018-01-24 06:53:07
【问题描述】:
我正在使用 okhttp 库开发 POST API。一切工作正常,除了我无法找到一种方法来在它的成功回调上显示一个简单的 toast 消息。如何向用户调用 toast 消息,以便他知道数据是否已发布到服务器上,或者是否在成功和失败回调中?
P.S 下面的代码在不同的类中,而不是在活动类中。
这是我的代码:
public DataSource(Context context) {
this.mContext = context;
mDbHelper = new DBHelper(mContext);
mDatabase = mDbHelper.getWritableDatabase();
}
post(URL, jsonData, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("FAILED", "onFailure: Failed to upload data to server");
//here I want to show toast message
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
Log.i("SUCCESSFUL", "onSuccess: data uploaded");
//here I want to show toast message
} else {
Log.i("UN SUCCESSFUL", "onFailure: Failed to upload data to server");
//here I want to show toast message
}
}
});
【问题讨论】:
-
您是否在相同的活动/片段中得到响应?
-
您是否在 Activity 或 Fragment 中收到此响应。
-
将 Activity 或 Context 作为最终参数传递给 post(context, URL, jsonData, Callback) 方法并调用 Toast.makeText(context, "Message", Toast.LENGTH_SHORT).show();在回调中
-
但是,如果在UI线程之外的另一个线程中调用onResponse(),则传递活动并调用runOnUIThread不会得到异常
-
Handler 或 Activity 如果您不检查应用程序的生命周期而不使用它们,则它们都容易泄漏。当一个 Activity 附加到一个类时旋转会导致它不会被清除,并导致你的应用程序泄漏内存,就像你的 Activity 和它的所有视图消耗一样多。并且每次旋转都会导致另一个泄漏,这可能使您的应用程序无法使用或导致 OutOfMemoryException。不仅要使用答案,还要学习如何用好它。