【发布时间】:2015-12-14 11:04:22
【问题描述】:
对于我的应用,我需要从返回一些 JSON 的服务器联系我们的 API。
在下载 JSON 时,它应该显示一个进度条。
我认为我应该在进行网络操作时使用 Android 的 AsyncTask 来处理 GUI,所以我在 Activity 中写了以下内容:
class DownloadManager extends AsyncTask<String, Void, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
mLoadingSpinner.setVisibility(View.VISIBLE);
}
@Override
protected Boolean doInBackground(String... params) {
String id = params[0];
downloadUtility.getId(id);
return true;
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
mLoadingSpinner.setVisibility(View.INVISIBLE);
}
}
基本上,onPreExecute 显示加载微调器,doInBackGround 下载一些 JSON,onPostExecute 停止微调器。
问题是,在downloadUtility.getId(id) 中我需要:
- 如果下载成功,则打开一个新意图。
- 如果下载失败,请继续执行相同的活动并显示错误 Toast。
getId的代码:
public Future getId(final String id) {
// set url
String url = IPAddress.PRODUCTION + Variables.get_id+ id;
downloading = Ion.with(context)
.load("GET", url)
.asJsonObject()
.withResponse()
.setCallback(new FutureCallback<Response<JsonObject>>() {
@Override
public void onCompleted(Exception e, Response<JsonObject> response) {
//try catch here for null getHeaders
if (response != null) {
if (response.getHeaders().code() == 200) {
//SUCCESS !! Open new intent!
} else {
//FAIL!! Show TOAST!
}
}
}
});
return downloading;
}
如您所见,我正在返回一个未来对象。我如何从 future 对象中知道 onCompleted (void) 是成功还是失败,以便我可以在 asynctask 中处理结果(成功:打开新意图,失败:toast)?
【问题讨论】:
标签: android android-asynctask callback future