如何在正确的时间调用方法?



有一个简单的请求。在这种情况下,我捕获错误 403。

.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));
}
}

我调用login(connect.login(manager, manager.getphone((, manager.getpass(((;(方法:

.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);
}
}

在这种方法中,我必须保存新的会话ID。

但是一旦程序进入方法.login(登录,passFromSms(

并执行它,它会立即退出该方法(并且不会为我保存会话(并执行该方法:

connect.reconnectNewOrder (manager.getsessionid ((, new Gson ((. 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并在其回调调用reconnectNewOrderenqueue()而不是使用execute()改造方法

最新更新