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

Android Kotlin项目中java.net.http包无法解析问题求助

解决Android Kotlin项目中java.net.http相关引用报错的问题

核心原因

Android原生支持java.net.http包(包含HttpClient、HttpRequest等类)是从**API 33(Android 13)**开始的,且需要配合完整的Gradle配置才能生效。如果项目minSdkVersion低于33,或配置存在缺失,就会出现引用无法解析的错误。


解决方案分两种情况:

情况1:可以升级项目到API 33及以上

按以下步骤完善配置:

  1. 修改模块级build.gradle(或build.gradle.kts)的API版本:
    android {
        compileSdkVersion 33 // 或更高版本
        defaultConfig {
            minSdkVersion 33
            targetSdkVersion 33 // 或更高版本
        }
    
        // 保留已有的Java/Kotlin版本配置
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_11
            targetCompatibility JavaVersion.VERSION_11
        }
        kotlinOptions {
            jvmTarget = '11'
        }
    }
    
  2. 确保Android Gradle Plugin(AGP)版本≥7.0.0:
    在项目级build.gradle中检查并更新:
    dependencies {
        classpath "com.android.tools.build:gradle:7.0.0" // 或更高版本
    }
    
  3. 确认导入正确的包:
    在Kotlin代码中添加对应导入:
    import java.net.http.HttpClient
    import java.net.http.HttpRequest
    import java.net.http.HttpResponse
    

情况2:无法升级到API 33

由于java.net.http没有官方向下兼容的Desugar支持,建议使用Android生态中成熟的HTTP库替代,比如OkHttp:

  1. 添加OkHttp依赖:
    在模块级build.gradle中加入:
    implementation "com.squareup.okhttp3:okhttp:4.12.0"
    
  2. 示例POST请求代码:
    import okhttp3.Call
    import okhttp3.Callback
    import okhttp3.MediaType.Companion.toMediaType
    import okhttp3.OkHttpClient
    import okhttp3.Request
    import okhttp3.RequestBody.Companion.toRequestBody
    import okhttp3.Response
    import java.io.IOException
    
    val client = OkHttpClient()
    val mediaType = "application/json; charset=utf-8".toMediaType()
    val requestBody = "{\"key\":\"value\"}".toRequestBody(mediaType)
    val request = Request.Builder()
        .url("https://your-api-url.com/post")
        .post(requestBody)
        .build()
    
    client.newCall(request).enqueue(object : Callback {
        override fun onFailure(call: Call, e: IOException) {
            // 处理请求失败逻辑
        }
    
        override fun onResponse(call: Call, response: Response) {
            response.body?.string()?.let { responseBody ->
                // 处理响应内容
            }
        }
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:05:20