gpt4 book ai didi

Android volley - 当所有请求完成时获得回调

转载 作者:搜寻专家 更新时间:2023-11-01 08:26:04 25 4
gpt4 key购买 nike

我很感激你能给我的任何帮助。我有以下问题:

我有一个应用程序使用 SyncAdapter 定期手动同步本地数据库与服务器数据。但是我需要在用户刚要登录应用程序时执行手动同步,同时显示加载对话框。同步完成后,应该隐藏对话框,并显示主要 Activity 。你有什么建议?

我正在使用 volley 来处理 HTTP 请求。我有点困惑,因为请求总是异步运行的,所以很难知道所有请求何时完成以隐藏对话框。

代码如下:

VolleySingleton.getInstance(getContext()).addToRequestQueue(
new JsonObjectRequest(
Request.Method.GET,
Constants.GET_URL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
// This method sync the data
updateLocalData(response, syncResult);
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
getContext().sendBroadcast(new Intent(Constants.SYNC_CORRUPTED_BY_SERVER));
Log.d(TAG, "Sync (makeLocalSync), Exception => " +
error.getLocalizedMessage());
}
}
)
);

对不起我的英语水平...

谢谢!

最佳答案

不幸的是,Volley 的 RequestQueue 不提供任何接口(interface)或回调来让您知道所有待处理的请求何时完成。我发现在所有请求完成时通知的解决方法是为每个请求的响应或失败更新一个 int 和一个 boolean 类成员。重要的是您的请求可以访问这些成员,而且数字对应于更新后的值,因此当该值下降到 0 时,您将知道所有请求都已完成。

private int numberOfRequestsToMake = NUMBER;
private boolean hasRequestFailed = false;

然后,在创建请求时:

JsonObjectRequest req = new JsonObjectRequest(url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, "successful request to " + url);
numberOfRequestsToMake--;

if(numberOfRequestsToMake == 0) {
if(!hasRequestFailed) {
//All requests finished correctly
} else {
//At least one request failed
}
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e(TAG, "unsuccessful request to " + url);
numberOfRequestsToMake--;
hasRequestFailed = true;

if(numberOfRequestsToMake == 0) {
//The last request failed
}
}
}
);

MyVolleySingleton.getInstance().addToRequestQueue(req);

关于Android volley - 当所有请求完成时获得回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44958795/

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