retrofit:Unable to create call adapter for class java.lang.Object

原因:Retrofit中未找到Object类相对应的CallAdapter

解决方法:

1 看callAdapterFactory是否添加正确

2 retrofit接口方法不能suspend

1
2
3
4
interface Api{
@GET("auth")
suspend fun getTokenAsync(): Deferred<Bean>
}

suspend fun getTokenAsync(): Deferred

原理:retrofit源码中用到动态代理,返回值类型存放在动态代理的method方法中。加了suspend关键字后method.getReturnType恒为Object类型(再问为什么我也不知道了)