Android 如何在正确的时间调用方法?
有一个简单的请求。在这种情况下,我捕获错误403Android 如何在正确的时间调用方法?,android,retrofit,Android,Retrofit,有一个简单的请求。在这种情况下,我捕获错误403 .enqueue(new Callback<NewOrderResponse>() { @Override public void onResponse(Call<NewOrderResponse> call, Response<NewOrderResponse> response) {
.enqueue(new Callback<NewOrderResponse>() {
@Override
public void onResponse(Call<NewOrderResponse> call, Response<NewOrderResponse> response) {
if (response.code() == 403) {
connect.login(manager, manager.getphone(), manager.getpass());
connect.reconnectNewOrder(manager.getsessionid(), new Gson().toJson(newOrderRequest));
}
}
.enqueue(新的回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==403){
connect.login(manager、manager.getphone()、manager.getpass());
connect.reconnectNewOrder(manager.getsessionid(),newgson().toJson(newOrderRequest));
}
}
我调用login(connect.login(manager,manager.getphone(),manager.getpass());)方法:
.login(登录,passFromSms)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200){
//保存id会话
Headers header=response.Headers();
List cookieList=header.values(“设置Cookie”);
_jsessionid=(cookieList.get(0.split)(;))[0];
savesession(_jsessionid);
}
}
在这个方法中,我必须保存新的会话id
但是一旦程序进入方法。登录(login,passFromSms)
并执行它,它立即退出该方法(不为我保存会话)并执行该方法:
connect.reconnectNewOrder(manager.getsessionid()、newgson()、toJson(newOrderRequest));
结果表明,这个方法是在旧会话中执行的
- 程序执行不是顺序的,为什么
- 问题是什么?我能做些什么使程序按顺序运行,或者有哪些选项
.login(login, passFromSms)
.enqueue(new Callback<AuthResponse>() {
@Override
public void onResponse(Call<AuthResponse> call, Response<AuthResponse> response) {
if (response.code() == 200) {
// Save id session
Headers header = response.headers();
List<String> cookieList = header.values("Set-Cookie");
_jsessionid = (cookieList.get(0).split(";"))[0];
manager.savesession(_jsessionid);
// Call method here, handle failed response appropriately
reconnect(_jsessionid);
}
}
//...
// The method you will call from the 200 response block
private void reconnect(int sessionId) {
connect.reconnectNewOrder (sessionId, new Gson (). toJson(newOrderRequest));
}
.login(登录,passFromSms)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200){
//保存id会话
Headers header=response.Headers();
List cookieList=header.values(“设置Cookie”);
_jsessionid=(cookieList.get(0.split)(;))[0];
savesession(_jsessionid);
//在此处调用方法,适当处理失败的响应
重新连接(会话ID);
}
}
//...
//您将从200响应块调用的方法
私有void重新连接(int sessionId){
connect.reconnectNewOrder(sessionId,newgson().toJson(newOrderRequest));
}
调用响应块中的下一个方法:
.login(login, passFromSms)
.enqueue(new Callback<AuthResponse>() {
@Override
public void onResponse(Call<AuthResponse> call, Response<AuthResponse> response) {
if (response.code() == 200) {
// Save id session
Headers header = response.headers();
List<String> cookieList = header.values("Set-Cookie");
_jsessionid = (cookieList.get(0).split(";"))[0];
manager.savesession(_jsessionid);
// Call method here, handle failed response appropriately
reconnect(_jsessionid);
}
}
//...
// The method you will call from the 200 response block
private void reconnect(int sessionId) {
connect.reconnectNewOrder (sessionId, new Gson (). toJson(newOrderRequest));
}
.login(登录,passFromSms)
.enqueue(新的回调函数(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200){
//保存id会话
Headers header=response.Headers();
List cookieList=header.values(“设置Cookie”);
_jsessionid=(cookieList.get(0.split)(;))[0];
savesession(_jsessionid);
//在此处调用方法,适当处理失败的响应
重新连接(会话ID);
}
}
//...
//您将从200响应块调用的方法
私有void重新连接(int sessionId){
connect.reconnectNewOrder(sessionId,newgson().toJson(newOrderRequest));
}
当您在另一个线程上运行调用排队时,您无法控制首先运行哪个线程,因此您必须等待执行login
调用并在其回调调用中重新连接neworder或使用execute()代替enqueue()
改装方法当您将在另一个线程上运行的调用排队时,您无法控制首先运行哪个线程,因此您必须等待执行login
调用,并在其回调调用中重新连接新订单
或使用execute()代替enqueue()
改装方法也许可以通过调用200响应块中的一个方法来解决这个问题?您可以粘贴整个classNo,I enter to connect.login()也许可以通过调用200响应块中的一个方法来解决这个问题?您可以粘贴整个classNo,I enter to connect.login()吗好的软件设计并不总是便于使用。好的软件设计并不总是便于使用。