【发布时间】:2020-05-26 11:01:59
【问题描述】:
我正在调用一个提供 Http 状态码 400 的 api
这是我的 NetworkBoundResourceNoDb
public abstract class NetworkBoundResourceNoDb<RequestType> {
private Observable<Resource<RequestType>> result;
@MainThread
protected NetworkBoundResourceNoDb() {
Observable<Resource<RequestType>> source;
source = createCall()
.subscribeOn(Schedulers.io())
.doOnError(t -> onFetchFailed())
.observeOn(AndroidSchedulers.mainThread());
result = Observable.ambArray(source);
}
public Observable<Resource<RequestType>> getAsObservable() {return result;}
protected boolean onFetchFailed() {
return false;
}
@NonNull
@MainThread
protected abstract Observable<Resource<RequestType>> createCall();
}
这是API代码
@GET("api/content/count")
Observable<List<WordCountData>> wordCount();
这是存储库函数
fun wordCount(): Observable<Resource<List<WordCountData>>>? {
return object : NetworkBoundResourceNoDb<List<WordCountData>>() {
override fun createCall(): Observable<Resource<List<WordCountData>>> {
return courseApi.wordCount()
.flatMap { learntWords ->
Observable.just(
if (learntWords == null) Resource.error("", emptyList())
else Resource.success(learntWords)
)
}
}
}.asObservable
}
这是视图模型代码
private var wordCount = MutableLiveData<Resource<List<WordCountData>>>()
fun getWordCountLiveData() = wordCount
fun getWordCountList() {
courseRepository.wordCount()?.subscribe { resource -> getWordCountLiveData().postValue(resource) }
}
这是我的视图代码
private fun loadWordCount() {
crViewModel = ViewModelProviders.of(this, viewModelFactory).get(CrViewModel::class.java)
crViewModel.getWordCountLiveData().observe(this, androidx.lifecycle.Observer {
resource -> when {
resource.isLoading -> println("loading")
resource.data != null -> {
drawChart(resource.data)
}
else -> handleErrorResponse()
}
})
crViewModel.getWordCountList()
}
我需要传递 Http 状态码才能查看。我能够在存储库中的 onFetchfailed 中得到错误,同时使用 throwable 参数实现它,但之后无法处理它
它给了我“io.reactivex.exceptions.OnErrorNotImplementedException: HTTP 400”错误
请帮助我提前谢谢
【问题讨论】:
标签: android mvvm retrofit rx-java rx-kotlin