【发布时间】:2019-01-16 16:51:33
【问题描述】:
我正在构建一个应用程序,它现在有一个主要数据模型Character,我将 Room 用作本地数据库,并使用 retrofit2 进行 API 调用。
用户可以将一个字符设置为最喜欢的,当这种情况发生时,这个字符存储在本地数据库中(只有本地数据库知道当前用户最喜欢的字符,这个应用程序不会在远程服务器上存储任何数据,只需使用 API 获取列表人物)。
问题是当用户下次加载应用程序时如何从 Web 和本地 DB 加载列表(Room return LiveData<List<Character>)并从 Web 列表 Characters 中过滤掉,在 RxJava2 的帮助下存储在本地 DB 中(我可以使用 Observable 作为 Retrofit2) 的返回值,所以当我在 RecyclerView 中显示列表时,不会有重复。
为了更好地理解我的意思:
我有MainActivity 有MainViewModel,在MainViewModel 我有CharacterRepository 参考,它知道如何从网络加载数据为(Call<CaharacterResponse> / Observable<CharacterResponse>)和从本地数据库加载方法Livedata<List<Character>>(这是字符列表被用户标记为收藏)。
我想要的是当用户加载应用程序时,将加载 Web 和本地数据,然后过滤结果以删除重复项。
*CharacterResponse 有关于网络调用结果的额外字段,其中一个字段是 List。
@Dao
public interface CharacterDao {
@Query("SELECT * FROM character ORDER BY name")
LiveData<List<Character>> getAllFavoriteCharacters();
....
}
public interface ExampleClient {
String BASE_URL = "http://gateway.example.com/public/";
@GET("characters/{id}")
Call<CharacterResponse> getCharacter(@Path("id")int id);
@GET("characters")
Call<CharacterResponse> getCharacters(@Query("limit") @Nullable Integer limit);
Observable<CharacterResponse> getCharacters();
}
【问题讨论】:
-
可以分享一下相关代码吗?
-
@Anatolii 我编辑了问题
标签: android rx-java retrofit android-room