1

我有一个使用 Hilt 进行依赖注入和 Moshi 进行 JSON 解析的 Android 应用程序。该应用程序向 REST 服务器发出 http 请求,该服务器为所有返回数据的端点返回具有以下格式的 json 响应:

{ 
   data: specificData,
   errors: [...]
}

我想提供一个通用的 json 适配器,它可以像这样注入到 DataSource 类中:

class LoginDataSource @Inject constructor(
    private val okHttpClient: OkHttpClient,
    private val authAdapter: JsonAdapter<NetworkResponse<Auth>>
)

例如以下数据类:

@JsonClass(generateAdapter = true)
data class NetworkResponse<T> (val data: T, val errors: Array<Int>)

@JsonClass(generateAdapter = true)
data class Auth (val token: String, val refreshToken: String)

在寻找提供 json 适配器的方法时,我最终创建了以下模块:

@Module
@InstallIn(ActivityComponent::class)
object MoshiAdapterModule {

    @Provides
    inline fun <reified T> provideGenericNetworkResponseJsonAdapter(): JsonAdapter<NetworkResponse<T>> {
        val typeT: Type = Types.newParameterizedType(NetworkResponse::class.java,  T::class.java)
        val moshi =  Moshi.Builder()
            .add(KotlinJsonAdapterFactory())
            .build()
        return moshi.adapter(typeT)
    }
}

但是,这不起作用,我收到 [Dagger/MissingBinding] 错误告诉我JsonAdapter<NetworkResponse<Auth>> cannot be provided without an @Provides-annotated method. 谁能看到我做错了什么?

我最近开始学习 Kotlin,之前没有使用过 Hilt 或 Moshi,所以如果我遗漏了一些明显的东西,我深表歉意。

4

0 回答 0