try catch上的无限循环java Android Studio

wmvff8tz  于 2023-03-24  发布在  Android
关注(0)|答案(1)|浏览(136)

当所有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;
                    }

                });
            }
        });

我试图把一个布尔标志,以防止多个循环。但它没有做任何事情

0sgqnhkj

0sgqnhkj1#

我认为这是因为你把观察功能放在按钮onclickListener里面,所以每次你点击按钮时,观察功能都会被再次调用。
你需要把observe放在外面,只需要在activity中初始化一次。然后用按钮onclick调用ViewModel来处理你的任务,完成后发布结果以再次在activity中观察它。

相关问题