http запрос в корутине
Для своих целей я использую khttp, т. к. он подходит под меня. Попробовал сделать запрос - не вышло (вылетало приложение). немного почитав о данной проблеме, я сделал вывод, что мне необходимо сделать все не в основном потоке. Нашел информацию о корутинах и на основе примеров в интернете сделал это:
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val otherClass = OtherClass() // инициализация класса ниже
val button: Button = findViewById(R.id.request_button)
val text_view: TextView = findViewById(R.id.result_text)
button.setOnClickListener {
GlobalScope.launch(Dispatchers.Main) {
val result = otherClass.getRequest("https://ru.stackoverflow.com")
text_view.text = result
}
}
}
}
тот самый класс OtherClass
class OtherClass {
suspend fun getRequest(url: String) : String {
return withContext(Dispatchers.IO) { khttp.get(url).text }
}
}
Это все я сделал из одного примера, который я нашел в интернете, но к сожалению приложение все так же вылетает. Помогите, пожалуйста, решить данную проблему..
LogCat
2021-11-12 19:08:13.139 1596-1596/com.company.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.myapplication, PID: 1596
java.lang.NoSuchFieldException: No field host in class Ljava/net/URL; (declaration of 'java.net.URL' appears in /apex/com.android.art/javalib/core-oj.jar)
at java.lang.Class.getDeclaredField(Native Method)
at khttp.requests.GenericRequest.toIDN(GenericRequest.kt:198)
at khttp.requests.GenericRequest.makeRoute(GenericRequest.kt:208)
at khttp.requests.GenericRequest.<init>(GenericRequest.kt:132)
at khttp.KHttp.request(KHttp.kt:60)
at khttp.KHttp.get(KHttp.kt:30)
at khttp.KHttp.get$default(KHttp.kt:29)
at com.company.myapplication.OtherClass.getRequest(OtherClass.kt:11)
at com.company.myapplication.MainActivity$onCreate$1$2.invokeSuspend(MainActivity.kt:42)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8595)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)