You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复java.lang.IllegalStateException: Already executed.(PID:7664)错误?

解决java.lang.IllegalStateException: Already executed.错误

这个错误核心原因是同一个可执行任务对象被重复调用执行方法,最常见于OkHttp请求场景,以下是具体解决方案:

  • 检查请求对象复用问题
    若使用OkHttp发起登录请求,Call对象是一次性的,执行后无法再次调用execute()或enqueue()。要避免复用同一个Call实例,每次发起登录请求都创建新的Call对象:

    // 错误示例:复用同一Call实例
    OkHttpClient client = new OkHttpClient();
    Request loginRequest = new Request.Builder().url("登录接口地址").build();
    Call loginCall = client.newCall(loginRequest);
    
    // 多次点击登录按钮重复调用会报错
    loginBtn.setOnClickListener(v -> {
        loginCall.enqueue(new Callback() { ... });
    });
    
    // 正确示例:每次请求创建新Call
    loginBtn.setOnClickListener(v -> {
        Request newLoginRequest = new Request.Builder().url("登录接口地址").build();
        Call newLoginCall = client.newCall(newLoginRequest);
        newLoginCall.enqueue(new Callback() { ... });
    });
    
  • 增加按钮防重复点击逻辑
    用户快速多次点击登录按钮会触发重复请求,可在点击后立即禁用按钮,请求完成(成功/失败)后再恢复:

    loginBtn.setOnClickListener(v -> {
        loginBtn.setEnabled(false);
        // 发起登录请求
        Call newLoginCall = client.newCall(newLoginRequest);
        newLoginCall.enqueue(new Callback() {
            @Override
            public void onResponse(Call call, Response response) {
                runOnUiThread(() -> loginBtn.setEnabled(true));
                // 处理登录成功逻辑
            }
    
            @Override
            public void onFailure(Call call, IOException e) {
                runOnUiThread(() -> loginBtn.setEnabled(true));
                // 处理登录失败逻辑
            }
        });
    });
    
  • 排查其他异步框架问题
    若使用AsyncTask、RxJava等其他异步框架,检查是否存在重复订阅/执行同一任务实例的情况,确保每次执行都创建新的任务实例。

  • 清理环境缓存
    重启模拟器和Android Studio,清理项目缓存(File → Invalidate Caches...),排除环境缓存导致的异常。

内容的提问来源于stack exchange,提问作者Nguyễn Khánh Tôn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:41:36