Я запросил API YouTube и сделал несколько моделей для сопоставления json с конвертером gson. Теперь я хочу использовать шаблон репозитория и унифицировать возвращаемое значение из моей базы данных и из удаленной системы, но у меня есть некоторые проблемы, связанные с тем, как вернуть указанную переменную c из наблюдаемой в Rx Java.
Я запрашиваю API следующим образом:
@GET("playlistItems?part=snippet")
fun getLatestVideosFromPlaylist(@Query("playlistId") playlistId:String, @Query("maxResults") maxResults:String): Observable<YoutubeVideosModel>
Мои модели
data class YoutubeVideosModel(
@SerializedName("items")
val videos: ArrayList<YoutubeVideo>
)
@Entity(tableName = "video")
data class YoutubeVideo(
@PrimaryKey(autoGenerate = true)
val id: Int? = null,
@SerializedName("snippet")
val video: YoutubeVideoData
)
Мой интерфейс источника данных
interface VideoDataSource {
fun fetchVideos(playlistId:String) : Observable<ArrayList<YoutubeVideo>>
}
Из локального источника данных я возвращаю arrayList из youtubeVideo
object VideoLocalSource: VideoDataSource {
override fun fetchVideos(playlistId: String): Observable<ArrayList<YoutubeVideo>> {
return Observable.fromCallable {
AppDatabase.getInstance(BaseApp.INSTANCE)?.getVideoDao()!!.fetchAllVideos()
}
}
}
Но с пульта не могу найти, как вернуть то же самое:
object VideoRemoteSource: VideoDataSource {
override fun fetchVideos(playlistId: String, maxResults:String): Observable<ArrayList<YoutubeVideo>> {
YoutubeApiClient.getYoutubeService().getLatestVideosFromPlaylist(playlistId, maxResults)
.subscribe {
videoModel ->
//Here cannot use return
return ObservableFromArray(arrayOf(videoModel.videos)
}
}
}