Запрос okhttp3 выдает android .os.NetworkOnMainThreadException в Kotlin - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь вызвать API, чтобы узнать курсы обмена. Я выполнил инструкции и получил следующий код:

Задача:

class GetNetworkTask {

    var client = OkHttpClient()

    @Throws(IOException::class)
    fun doGetRequest(url: String) {

        val request: Request = Request.Builder().url(url).build()

        client.newCall(request).enqueue(object : Callback {

                override fun onFailure(call: Call, e: IOException) {
                    val ex = e.localizedMessage
                    Log.v("t", "Error: $ex")
                }

                override fun onResponse(call: Call, response: Response) {
                    val res: String? = response.body?.string()
                    Log.v("t", "Response: $res")
                }
            })

    }

}

Звонок:

private fun getRates() {

    val getNetworkTask = GetNetworkTask()

    try {
      getNetworkTask.doGetRequest("https://api.exchangeratesapi.io/latest?base=GBP")
    } catch (e: IOException) {
      e.printStackTrace()
    }

}

Когда я пытаюсь запустить это, я получаю NetworkOnMainThreadException, которого я не понимаю, потому что в руководстве упоминается, что это asyn c и не должно вызывать это исключение.

Любая помощь в исправлении будет очень признательна, спасибо!

К вашему сведению: я новичок в разработке Kotlin и Android, в настоящее время пытаюсь создать приложение iOS из мой для Android.

ОБНОВЛЕНИЕ:

Ошибка журнала:

2020-05-07 08:06:19.492 25998-25998/com.ets.toolbox E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.ets.toolbox, PID: 25998
    android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1565)
        at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:115)
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:103)
        at java.net.InetAddress.getAllByName(InetAddress.java:1152)
        at okhttp3.Dns$Companion$DnsSystem.lookup(Dns.kt:49)
        at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.kt:164)
        at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.kt:129)
        at okhttp3.internal.connection.RouteSelector.next(RouteSelector.kt:71)
        at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:213)
        at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:108)
        at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:76)
        at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:245)
        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:82)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
        at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:197)
        at okhttp3.internal.connection.RealCall.execute(RealCall.kt:148)
        at com.ets.toolbox.ui.converters.currency.CurrencyConverterFragment.getRates(CurrencyConverterFragment.kt:294)
        at com.ets.toolbox.ui.converters.currency.CurrencyConverterFragment.onCreateView(CurrencyConverterFragment.kt:83)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2600)
        at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:881)
        at androidx.fragment.app.FragmentManagerImpl.addAddedFragments(FragmentManagerImpl.java:2100)
        at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1874)
        at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1830)
        at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
        at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
...