【发布时间】:2018-02-04 16:03:52
【问题描述】:
异步调用有问题。 我需要我的“do”循环来等待异步调用继续。 但是当你运行方法“lock.wait()”时,应用程序被冻结并且异步调用不是cales。
lock.wait();
应用程序冻结,但没有调用下面的命令行,应用程序没有继续执行下面的方法:
callUser.enqueue(new Callback<BaseResponse<User>>() {
@Override
public void onResponse(Response<BaseResponse<User>> response, Retrofit retrofit) {
updateUsersFromServer(response.body());
}
@Override
public void onFailure(Throwable t) {
UserEvent UserEvent = new UserEvent(
null, 500, R.string.order_unavailable);
EventBus.getDefault().post(UserEvent);
}
});
我需要更好地理解“wait()”方法是什么样的。
如何让应用程序在“wait()”方法中不停止?
public void fetchUser(Integer cdCode, String pinckingListNumber) {
List<User> Users = new ArrayList<>();
do {
fetchUserApi(cdCode, pinckingListNumber);
synchronized (lock) {
try {
lock.wait();
} catch (InterruptedException e) {
callUser = false;
UserEvent UserEvent = new UserEvent(
null, 500, R.string.order_unavailable);
EventBus.getDefault().post(UserEvent);
}
}
offset = offset + 10;
if (!ObjectValidation.isEmptyOrNull(response)) {
for (int i = 0; i < response.getRecords().size(); i++) {
Users.add(response.getRecords().get(i));
}
if (response.getMeta().getRecordCount() < response.getMeta().getOffset())
callUser = false;
} else {
callUser = false;
UserEvent UserEvent = new UserEvent(
null, 500, R.string.order_unavailable);
EventBus.getDefault().post(UserEvent);
}
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
callUser = false;
UserEvent UserEvent = new UserEvent(
null, 500, R.string.order_unavailable);
EventBus.getDefault().post(UserEvent);
}
} while (callUser);
UserEvent UserEvent = new UserEvent(
Users, 200, R.string.delivery_success);
EventBus.getDefault().post(UserEvent);
}
private void fetchUserApi(Integer cdCode, String pinckingListNumber) {
UserResource UserResource = getRetrofit().create(UserResource.class);
Call<BaseResponse<User>> callUser = UserResource.getListUsers(
authController.getTokenHeader(),
pinckingListNumber,
cdCode,
limit,
offset
);
callUser.enqueue(new Callback<BaseResponse<User>>() {
@Override
public void onResponse(Response<BaseResponse<User>> response, Retrofit retrofit) {
updateUsersFromServer(response.body());
}
@Override
public void onFailure(Throwable t) {
UserEvent UserEvent = new UserEvent(
null, 500, R.string.order_unavailable);
EventBus.getDefault().post(UserEvent);
}
});
}
private void updateUsersFromServer(BaseResponse<User> baseResponseUsers) {
synchronized (lock) {
response = baseResponseUsers;
lock.notify();
}
}
【问题讨论】:
-
你到底在问什么?唯一可辨别的问题的字面答案是“很多人都这样做”。如果您需要帮助,您需要提出一个明确而明确的问题。不是“请帮帮我”或“请给我解释一下”……这两个问题都不是我们可以回答的。
-
如果您不能提出明确/明确的问题,我最好的建议是寻找更多示例、教程、书籍……并阅读/重读它们,直到您理解为止。或者,找一位准备好就该主题为您提供一对一辅导的专家。提示:StackOverflow 不是找到这样一个人的地方。试试你当地的大学...
-
Soo 为什么要写等待方法?
-
很抱歉这个问题做得不好,我现在已经试过了。我用英文写作有困难,我想对我有一点耐心。
-
我编辑了你的问题的标题,因为“谁”“哪个人”,我想你想说“如何......”“应该怎么做...”。
标签: java android asynchronous async-await threadpool