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

Android项目无法导入java.net.http包的问题求助

Android项目无法导入java.net.http类的解决方案

问题根源

  1. Android平台未内置java.net.http包:该包是Java 11新增的标准库,但Android SDK并未原生包含这些类,仅在Android 13(API 33)开始对部分类提供有限支持,且兼容性不佳。
  2. AGP版本过于老旧:你使用的com.android.tools.build:gradle:3.2.0是2018年的版本,完全不支持Java 11编译选项,即使手动设置sourceCompatibility也无法生效。

解决方案

方案一:改用Android生态兼容的HTTP客户端(推荐)

使用OkHttp这类成熟的Android HTTP库是最稳妥的选择,以下是实现你需求的代码示例:

  1. 在build.gradle的dependencies块中添加OkHttp依赖:
implementation 'com.squareup.okhttp3:okhttp:Common okhttp:4.11.0' // 可替换为最新稳定版
  1. 重写GET请求代码(Android要求网络请求必须在非主线程执行,这里用Kotlin协程实现):
import okhttp3.OkHttpClient
import okhttp3.Request
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.net.URLEncoder
import kotlin.coroutines.CoroutineContext

fun String.utf8(): String = URLEncoder.encode(this, "UTF-8")

// 在Activity/Fragment中调用示例
fun fetchDataInActivity(coroutineContext: CoroutineContext) {
    launch(coroutineContext) {
        val responseBody = fetchData()
        println(responseBody)
        // 在这里更新UI
    }
}

private suspend fun fetchData(): String = withContext(Dispatchers.IO) {
    val params = mapOf("name" to "John Doe", "occupation" to "gardener")
    val urlParams = params.map { (k, v) -> "${k.utf8()}=${v.utf8()}" }
        .joinToString("&")
    val url = "https://httpbin.org/get?$urlParams"

    val client = OkHttpClient()
    val request = Request.Builder()
        .url(url)
        .build()

    client.newCall(request).execute().use { response ->
        if (!response.isSuccessful) throw IOException("Unexpected code $response")
        response.body?.string() ?: ""
    }
}

方案二:升级AGP并尝试使用Java 11类(不推荐)

如果坚持使用java.net.http,需完成以下步骤,但仅适用于API 33+设备,且兼容性差:

  • 升级AGP到7.0.0以上(推荐最新稳定版),同时升级Gradle wrapper到对应版本(如AGP 7.0.0需要Gradle 7.0+)。
  • 将minSdk设置为33,因为仅Android 13开始支持部分java.net.http类。
  • 即使完成上述设置,仍可能存在API不全、行为不一致的问题,不建议用于生产环境。

额外注意事项

  • 确保在AndroidManifest.xml中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
  • 严禁在Android主线程执行网络请求,必须使用This协程、异步回调等方式处理。

内容的提问来源于stack exchange,提问作者Mikhail K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:37