gpt4 book ai didi

android - 在另一个完成后执行 Volley 请求

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

我有两个 Volley 请求。第一个请求对用户进行身份验证;第二个从服务器获取数据。

如果我发送一个 GET 请求并且用户未通过身份验证,我想触发第一个请求,对用户进行身份验证,然后在用户身份验证成功后继续执行第二个请求。

最佳答案

因此,解决方案非常简单。 :)

在了解了回调及其工作原理后,我明白了该怎么做。因此,我实现了一个接口(interface)来声明我想要调用的方法:

public interface AuthenticationCallback {

public void onLoginSuccess(String result);

public void onLoginError(String result);
}

public interface ResponseCallback {

public void onLoginSuccess(String result);

public void onAuthorizationError(String result);

}

我的功能:

public void getConversationMessages(final Context context, final String conversationID, final ResponseCallback responseCallback) {

final String url = GET_CONVERSATION_MESSAGES + conversationID;

StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
if (responseCallback != null) {
responseCallback.onLoginSuccess(response);
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
if (error.networkResponse != null && error.networkResponse.statusCode == HttpURLConnection.HTTP_UNAUTHORIZED){
if (responseCallback != null) {
responseCallback.onAuthorizationError(error.getMessage());
}
}
}
})
{
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Cookie", AppSingleton.getInstance(context).getCookie());
headers.put("Content-Type", "application/json");
return headers;
}
};

AppSingleton.getInstance(context).getRequestQueue().add(stringRequest);
}
}

我的 Activity :

ServerConnection.getInstance().getConversationMessages(getApplicationContext(), id, new ResponseCallback() {
@Override
public void onLoginSuccess(String result) {

}

@Override
public void onAuthorizationError(String result) {

ServerConnection.getInstance().loginFunction(getApplicationContext(), userID, new AuthenticationCallback() {
@Override
public void onLoginSuccess(String result) {
ServerConnection.getInstance().getConversationMessages(getApplicationContext(), conID, new ResponseCallback() {
@Override
public void onLoginSuccess(String result) {

}

@Override
public void onAuthorizationError(String result) {

}
});
}
@Override
public void onLoginError(String result) {

}
});
}
});

基本上,代码会尝试发送一个GET请求。如果用户未通过身份验证,则它将执行 onAuthorizationError() 处的代码,这将对用户进行身份验证。一旦用户认证成功,它会再次发送GET请求。

我认为像这样嵌套回调不是一个好的做法,但我稍后会修复它并更新我的答案。

如果有人有更好的实现方法,请发布另一个答案!

关于android - 在另一个完成后执行 Volley 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30920457/

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