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

Android中创建OkHttpClient实例导致应用崩溃问题求助

问题分析

崩溃日志抛出java.lang.ExceptionInInitializerError,且错误发生在OkHttpClient构造阶段,这类问题通常由以下原因导致:

  • OkHttp依赖配置不完整或版本兼容问题
  • 初始化时机错误,在Activity初始化阶段(<init>方法)触发类加载异常
解决方案

1. 检查并完善依赖配置

确保在app模块的build.gradle(Module级别)中添加正确的OkHttp依赖,使用最新稳定版:

dependencies {
    // OkHttp核心依赖
    implementation 'com.squareup.okhttp3:okhttp:4.12.0'
    // 可选:Android适配依赖
    implementation 'com.squareup.okhttp3:okhttp-android:4.12.0'
}

添加后同步Gradle,确保依赖下载完整。

2. 调整OkHttpClient初始化时机

不要在Activity成员变量或AsyncTask成员变量阶段直接初始化OkHttpClient,建议修改如下:

public class OkHttpHandler extends AsyncTask<Void, Void, String> {
    private OkHttpClient client;

    public OkHttpHandler() {
        // 在构造方法中初始化客户端
        client = new OkHttpClient();
    }

    @Override
    protected String doInBackground(Void... voids) {
        MediaType mediaType = MediaType.parse("application/json");
        RequestBody body = RequestBody.create(mediaType, "{\n  \"url\":             \"https://www.google.com/maps/place/20.6738673,-103.3766127\",\n  \"domain\": \"tinyurl.com\",\n  \"alias\": \"\",\n  \"tags\": \"\",\n  \"expires_at\": \"\"\n}");
        Request request = new Request.Builder()
                .url("https://api.tinyurl.com/create")
                .post(body)
                .addHeader("accept", "application/json")
                .addHeader("Authorization", "Bearer 你的真实Token") // 替换为有效的授权令牌
                .addHeader("Content-Type", "application/json")
                .build();
        try {
            Response response = client.newCall(request).execute();
            return response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

同时在MainActivity的生命周期方法中创建AsyncTask实例,避免在Activity初始化阶段执行:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        // 在onCreate中启动异步任务
        new OkHttpHandler().execute();
    }
}

3. 清理重建项目

  • 执行Build -> Clean Project
  • 执行Build -> Rebuild Project
  • 在设备应用设置中清除当前应用的缓存和数据

4. 代码混淆配置(若启用)

如果开启了ProGuard/R8,需在proguard-rules.pro中添加规则避免OkHttp类被混淆:

-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class okio.** { *; }
额外提醒
  • 代码中的@token必须替换为TinyURL API提供的真实授权令牌,否则请求会失败
  • AsyncTask已在Android 11及以上版本被弃用,建议改用Coroutines、Retrofit(基于OkHttp)等更现代的网络请求方案

内容的提问来源于stack exchange,提问作者user3542566

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:55:40