オフラインで見るためにデータにアクセスできるようにするには、まずデータベースからデータを要求し、次にネットワークからapiデータベースへ)。 F.e.私は、ユーザIDによるリサイクルのスコアを取得したいと言う:RxJava 2デバウンス:次の観測可能なエラーが発生したときにデバウンスを無視する方法
Datalayer:
class RecycleScoreRepository{
fun getRecycleScoresByUserId(userId: Int): Observable<RecycleScores> {
return Observable.concatArray(
getRecycleScoresFromDb(userId),
getRecycleScoresFromApi(userId))}
}
object RepositoryManager {
...
fun getRecycleScoresByUserId(userId: Int): Observable<RecycleScores> {
return recycleScoreRepository.getRecycleScoresByUserId(userId)
//Drop DB data if we can fetch item fast enough from the API to avoid UI flickers
.debounce(400, TimeUnit.MILLISECONDS)} ...
プレゼンター:
RepositoryManager.getRecycleScoresByUserId(userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
// do something on success
}, {
// do something on error
})
だから私のプレゼンターがgetRecycleScoresByUserIdにリポジトリに加入しています。私はデバウンス演算子を使用している場合は、APIの呼び出しが十分に速い私はUIのちらつきを防ぐためにuiの戻り値を2回設定していないことを確認しています。しかし今、何が起こるのはデータベースが正常に私にリサイクルスコアを返すが、何らかの理由でapiリクエストレスポンスにエラーが表示され、プレゼンターのサブスクライバがデータベースからの値でオブザーバブルを受け取るだけでエラーを受け取るということです。
データベースの観測値がサブスクライバによって受信され、api呼び出しがエラーを返すときにデバッガされないようにするにはどうすればよいですか?
おかげで、。唯一のことは、エラー/非200のサーバー応答を処理する方法を理解する必要があることです。それについてのヒント? :) –
私が持っている1つのアイデアは、あなたがそれを処理することができます成功とエラー応答を表すためにあなたの応答を他のタイプにラップすることです。私は私の答えに例を追加しました。それがあなたを助けることを願っています。 – chandra