我正在尝试创建一个自定义函数来处理我所有的API响应,但是我不知道如何正确处理它。
这是我的代码
我的自定义回调
interface ResponseCallback<T> {
fun onSuccess(response: T)
fun onError(code: Int, message: String)
}
这就是我调用请求API的方式
createRequest(getLogin(id), object : API.ResponseCallback<LoginResponse>{
override fun onError(code: Int, message: String) {
}
override fun onSuccess(response: LoginResponse) {
}
})
这就是我处理请求的方式
fun createRequest(source: Observable<*>, callback: ResponseCallback<*>) {
disposable.add(
source.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ it ->
//
// callback.onSuccess(it)
},
{
}
)
)
}
但是我的问题是,callback.onSuccess()
参数是Nothing
,不能接受callback.onSuccess(it)
请帮助我,谢谢。
答案 0 :(得分:1)
如果您不知道泛型的特定类型参数,则仅应使用star projections。使用它们时,编译器将防止您使用参数化类型执行不安全的操作。例如,您已经看到无法将任何参数传递给createRequest
,因为您实际上已经告诉编译器您不知道其类型应该是什么。
然后的解决方法是给您的Observable
函数一个类型参数,并使fun <T> createRequest(source: Observable<T>, callback: ResponseCallback<T>) {
...
callback.onSuccess(it) // works, since you're passing in a T to a method that requires a T
...
}
属于该类型,以及使您希望调用的回调:
<select>
<option>test</option>
<option>testing it</option>
<option>bla bla bla</option>
</select>