gpt4 book ai didi

android - Ljava/net/URL 类中没有字段主机

转载 作者:IT老高 更新时间:2023-10-28 13:38:57 26 4
gpt4 key购买 nike

当我尝试使用 khttp 请求 API 时,我在带有 SDK 28 (Android Pie 9.0) 的 Android Studio 上的模拟器中遇到了这个问题

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1
Process: com.example.corentin.myapplication, PID: 3168
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.NoSuchFieldException: No field host in class Ljava/net/URL; (declaration of 'java.net.URL' appears in /system/framework/core-oj.jar)
at java.lang.Class.getDeclaredField(Native Method)
at khttp.requests.GenericRequest.toIDN(GenericRequest.kt:193)
at khttp.requests.GenericRequest.makeRoute(GenericRequest.kt:198)
at khttp.requests.GenericRequest.<init>(GenericRequest.kt:128)
at khttp.KHttp.request(KHttp.kt:58)
at khttp.KHttp.get(KHttp.kt:28)
at khttp.KHttp.get$default(KHttp.kt:27)
at com.example.corentin.myapplication.InfoUser.run(InfoUser.kt:29)
at com.example.corentin.myapplication.InfoUser$onCreate$1.invoke(InfoUser.kt:23)
at com.example.corentin.myapplication.InfoUser$onCreate$1.invoke(InfoUser.kt:16)
at com.example.corentin.myapplication.doAsync.doInBackground(InfoUser.kt:11)
at com.example.corentin.myapplication.doAsync.doInBackground(InfoUser.kt:9)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:764) 

这就是错误的来源:

class doAsync(val handler: () -> Unit) : AsyncTask<Void, Void, Void>() {
override fun doInBackground(vararg params: Void?): Void? {
handler()
return null
}
}

class InfoUser : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_info_user)

doAsync {
run("https://api.imgur.com/3/account/xcoco55?client_id=CLIENT ID")
}.execute()
}


fun run(url: String) {
val response = khttp.get(url)

println("Coucou")
if (response.statusCode == 200) {
runOnUiThread {textView.text = response.text}
}
}
}

当我删除 val response = khttp.get(url) 行,或者当我在手机上启动应用程序(Android Oreo 8.1)时,一切正常。

您认为错误来自 Android 9.0 还是来自模拟器?

最佳答案

Disclaimer: I was referred to this post via the following request.

当您以 Android 9.0 为目标时会遇到此问题,并以 @Torben Kohlmeier 的形式出现。提及,因为该字段不再可访问。

您可以将模块 build.gradle 中的 khttp 实现替换为以下内容,这应该可以按预期工作。

实现“io.karn:khttp-android:0.1.0”

khttp-android library是原始 khttp library by jkcclemens 的一个分支.

关于android - Ljava/net/URL 类中没有字段主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com