Ошибка «Нет метода интерфейса setCallback» при вызове ion-клиента из сопрограммы - PullRequest
0 голосов
/ 03 ноября 2019

Согласно Kotlin Extensions - async / await тесту, чтобы использовать асинхронный веб-запрос, я должен инкапсулировать вызов внутри сопрограммы, как в примере ниже, взятом из теста:

private fun myGetAsync(url: String) = GlobalScope.async {
    try {
        Ion.with(App.instance.applicationContext)
                .load(url)
                .asString()
                .await()
    }
    catch (e: Exception) {
        Log.e(TAG,"Fail",e)
    }
}

Проблема в том, что когда я пытаюсь вызвать сопрограмму, вот так:

runBlocking {     // but this expression blocks the main thread
            Log.d(TAG,"RESULT" + myGetAsync("https://somewhere.earth/notExists").await())
        }

я получаю следующую библиотечную ошибку:

java.lang.NoSuchMethodError: No interface method setCallback(Lcom/koushikdutta/async/future/FutureCallback;)Lcom/koushikdutta/async/future/Future; in class Lcom/koushikdutta/async/future/Future; or its super classes (declaration of 'com.koushikdutta.async.future.Future' appears in /data/app/com.byte_artisan.mchat2.qua-Rd32X2D4BZg92hn423sVxA==/base.apk!classes4.dex)
        at com.koushikdutta.ion.IonRequestBuilder.resolveAndLoadRequest(IonRequestBuilder.java:383)
        at com.koushikdutta.ion.IonRequestBuilder.getLoaderEmitter(IonRequestBuilder.java:347)
        at com.koushikdutta.ion.IonRequestBuilder.getLoaderEmitter(IonRequestBuilder.java:310)
        at com.koushikdutta.ion.IonRequestBuilder.execute(IonRequestBuilder.java:675)
        at com.koushikdutta.ion.IonRequestBuilder.execute(IonRequestBuilder.java:636)
        at com.koushikdutta.ion.IonRequestBuilder.asString(IonRequestBuilder.java:701)
        at com.byte_artisan.mchat2.App$myGetAsync$1.invokeSuspend(App.kt:43)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:594)
        at kotlinx.coroutines.scheduling.CoroutineScheduler.access$runSafely(CoroutineScheduler.kt:60)
        at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:740)

Как мне ее использовать?

1 Ответ

1 голос
/ 03 ноября 2019

Я использовал старую версию com.koushikdutta.ion, несовместимую с расширением библиотеки androidasync-kotlin. Я исправил, установив библиотеки ионов на эти версии:

implementation 'com.koushikdutta.ion:ion:3.0.8' 
implementation 'com.koushikdutta.async:androidasync-kotlin:3.0.9'
...