try catch java Android Studio 上的无限循环

问题描述 投票:0回答:1

当所有 if 语句都为真时,我陷入了无限循环

UserRepo 类

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

                });
            }
        });

我试图放置一个布尔标志来防止多重循环。但它什么也没做

java android android-studio try-catch infinite-loop
1个回答
0
投票

我认为这是因为你把观察功能放在按钮里面

onclickListener
所以每次点击按钮时观察功能都会再次调用。

你需要把 observe 放在外面,只要用 activity 初始化它 1 次。然后使用按钮 onclick 调用 ViewModel 来处理您的任务,并在完成后发布结果以再次在活动中观察它。

© www.soinside.com 2019 - 2024. All rights reserved.