1、定义的接口:
@GET("hotkey/json")
suspend fun getHotKey(): Flow<HotKeyBean>
2、使用Retrofit2 返回Flow数据类型时报错:
Process: com.test.mvidemo, PID: 32451
java.lang.RuntimeException: Unable to create instance of interface kotlinx.coroutines.flow.Flow. Registering an InstanceCreator or a TypeAdapter for this type, or adding a no-args constructor may fix this problem.
at com.google.gson.internal.ConstructorConstructor$16.construct(ConstructorConstructor.java:275)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:211)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.UnsupportedOperationException: Interface can't be instantiated! Interface name: kotlinx.coroutines.flow.Flow
at com.google.gson.internal.UnsafeAllocator.assertInstantiable(UnsafeAllocator.java:118)
at com.google.gson.internal.UnsafeAllocator$1.newInstance(UnsafeAllocator.java:49)
at com.google.gson.internal.ConstructorConstructor$16.construct(ConstructorConstructor.java:272)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:211)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:40)
at retrofit2.converter.gson.GsonResponseBodyConverter.convert(GsonResponseBodyConverter.java:27)
at retrofit2.OkHttpCall.parseResponse(OkHttpCall.java:243)
at retrofit2.OkHttpCall$1.onResponse(OkHttpCall.java:153)
at okhttp3.internal.connection.RealCall$AsyncCall.run(RealCall.kt:519)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
3、解决方法:
去掉接口中的suspend关键字;Flow 类型不需要挂起函数声明。
@GET("hotkey/json")
fun getHotKey(): Flow<HotKeyBean>