统一DB和API返回类型



我想知道统一从room db和API返回的响应类型的最佳方法是什么。基本上,我正在尝试获得电影对象的列表

由于API响应设计,我必须将结果包装在Observable<MovieResponse>对象中

data class MovieResponse(@SerializedName("total_results") var totalResults: Int,
@SerializedName("total_pages") var totalPages: Int,
@SerializedName("results") var results: List<Movie>) {
}

因此,我可以将电影存储在本地Room数据库中,因此查询数据库的结果是Observable<List<Movie>>对象。

这迫使我有两种不同的方法(几乎相同(来订阅API和DB响应

private fun subscribeMovies(moviesObservable: Observable<MovieResponse>) {
disposable.add(moviesObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableObserver<MovieResponse>() {
override fun onComplete() {
}
override fun onError(e: Throwable) {
e.printStackTrace()
}
override fun onNext(movieResponse: MovieResponse) {
// do stuff
}
}))
}
private fun subscribeMoviesFromDB(moviesObservable: Observable<List<Movie>>) {
disposable.add(moviesObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableObserver<List<Movie>>() {
override fun onComplete() {
}
override fun onError(e: Throwable) {
e.printStackTrace()
}
override fun onNext(movies: List<Movie>) {
//do stuff
}
}))
}

关于如何正确处理这个问题,有什么建议吗?

感谢

您可以创建某种扩展所需内容的类。我不确定物理订阅,但至少您可以制作一个泛型类,可以将其放入subscribeWith()函数中,这不是多余的。

这样的怎么样?(对不起,我不认识kotlin,所以这里有一个java等价物(:

public class MyObserver<T> extends DisposableObserver<T> {
@Override
public void onComplete() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace()
}
@Override
public void onNext(T response) {
// do stuff
}
}

理论上,你可以在每个订阅中这样称呼它:

disposable.add(moviesObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : MyObserver<List<Movie>>() {

最新更新