使用RxJava 2和Retrofit 2从Observable对象中检索数据

时间:2017-01-24 17:08:58

标签: android networking retrofit2 rx-java2

我刚开始学习如何在Android中使用RxJava 2和Retrofit 2。我已经学习了很多教程,并且能够从服务器中检索数据。我的问题是,轻松访问检索数据的标准方法是什么。目前GSON将其解析为一个对象,我打印了toString,但就是这样。

我有这个界面来定义我的POST请求:

ApplicationStart

我创建了Retrofit对象:

public interface FacebookAppLoginService {
    @POST("app/fbapp_login")
    Observable<User> getUser(@Body FacebookAccessToken facebookAccessToken);
}
然后我创建一个对象来包含我的POST请求的JSON主体:

    Retrofit retrofit = new Retrofit.Builder()
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .baseUrl("http://rocky-garden-56471.herokuapp.com/")
            .build();

然后我从我的界面创建了Observable:

FacebookAccessToken facebookAccessToken = new FacebookAccessToken();

最后,我订阅了observable,观察主线程,但是在工作线程上执行请求(我认为),然后我记录结果:

Observable<User> newUser = facebookAppLoginService.getUser(facebookAccessToken);

toString正确打印出从服务器收到的用户信息。我在lambda函数中使用这个对象的标准方法是什么?我想将它存储在数据库中,或者至少将其保存在活动中的Object中。我应该怎么做呢?

1 个答案:

答案 0 :(得分:1)

你对线程发生的事情的解释是正确的。您正在新线程上执行请求,并且将在UI线程上调用subscribe()中的lambda

您可以在lambda函数中编写其余代码。您可以访问周围的类并将其存储在那里的字段中,或者从那里访问数据库类/方法。请注意,如果要在此处访问ui,则只需要在主线程上进行观察。如果您只想保存它,可以删除observeOn()调用并保留在后台线程中。另外,我建议对subscribeOn()使用Schedulers.io(),因为它是一个用于io操作的线程池,包括网络操作和数据库访问。