当所有if语句为真时,我陷入了无限循环
用户存储库类
public int update(Users user) throws ExecutionException, InterruptedException {
Callable<Integer> updateCallable = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return sqlite_room_dao.update(user.getId(),user.getUsername(),user.getPassword(),user.getPassword2());
}
};
Future<Integer> future = Executors.newSingleThreadExecutor().submit(updateCallable);
return future.get();
}
ViewModel类
public int update(Users users) throws ExecutionException, InterruptedException, TimeoutException {
logger.LogError(TAG, "Update", logger.jsonConverter(users));
return userRepo.update(users);
}
MainActivity类
final boolean[] isUpdating = {false};
UserViewModel userViewModel = new ViewModelProvider(this).get(UserViewModel.class);
btnUpdate.setOnClickListener(view -> {
if (!isUpdating[0]) {
isUpdating[0] = true;
Users user = new Users(5, "kylo", "14", "14");
userViewModel.getId(user.getId()).observe(this, users -> {
if (users.size() == 1) {
logger.LogError(tag, "Checked if exist", "true");
try {
int result = userViewModel.update(user);
if (result > 0) {
logger.LogError(tag, "Update", "success");
} else {
logger.LogError(tag, "Update", "failed");
}
} catch (ExecutionException | InterruptedException | TimeoutException e) {
e.printStackTrace();
}finally {
isUpdating[0] = false;
}
} else {
logger.LogError(tag, "Checked if exist", "false");
isUpdating[0] = false;
}
});
}
});
我试图把一个布尔标志,以防止多个循环。但它没有做任何事情
1条答案
按热度按时间0sgqnhkj1#
我认为这是因为你把观察功能放在按钮
onclickListener
里面,所以每次你点击按钮时,观察功能都会被再次调用。你需要把observe放在外面,只需要在activity中初始化一次。然后用按钮onclick调用ViewModel来处理你的任务,完成后发布结果以再次在activity中观察它。