Android Retrofit2 / RxJava2 / Room-简单数据处理

时间:2019-02-19 23:03:45

标签: java android retrofit2 rx-java2 android-room

我正在处理应用程序,在应用程序启动时,我正在从Rest服务下载类别和帖子,以将它们存储在SQLite数据库中。我有几个问题:

  1. 如何确定哪个对象是类别和哪个帖子?或者我怎么能访问它们? @ViewChild('tab1') tab1; ... this.tab1.getNativeElement().click(); 变量很奇怪。
  2. 我应将用于在数据库中插入项目的代码放在何处 使用会议室资料库?
  3. 我需要为每个帖子下载图片,该在哪里下载?

代码:

ViewChild

ItemsApi.class:

objects

2 个答案:

答案 0 :(得分:4)

以下是答案:

1)对于并行请求,应使用Observable.zip,如下所示

Observable<Boolean> obs = Observable.zip(
    client.getCategories(),
    client.getPosts(), 
    (categoriesList, postsList) -> {
         // you have here both categories and lists
         // write any code you like, for example inserting to db
         return true;
});

在这里,您具有每个类型(列表和列表)的参数(categoriesList,postsList)。

2)您应该将代码放在我在注释中指定的位置。确保您使用正确的线程

3)也可以在那里下载图像。您可以在函数中使用另一个zip -s,将并行下载的图像,插入到db等组合在一起。所有这些都应该是可观察到的,并与zip组合在一起。

zip中,您可以根据需要组合任意数量的可观察对象,它们的结果将作为组合函数的参数提供。

答案 1 :(得分:0)

1._您是否尝试过Retrofit的 addConverterFactory

Retrofit restAdapter = new Retrofit.Builder().baseUrl("https://abc")
                .addConverterFactory(GsonConverterFactory.create(new Gson()))
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        RestAuthenticationService restAuthenticationService = restAdapter.create(RestAuthenticationService.class);

RestAuthenticationService.class 中:

public interface RestAuthenticationService {

    @POST("security/login")
    Observable<User> login(@Body LoginRequest loginRequest);

}
  1. 您的意思是在本地处理缓存数据?我认为您应该使用Realm代替Room / native SQLite。

  2. 您应该使用PicassoGlide