我刚开始学习如何在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中。我应该怎么做呢?
答案 0 :(得分:1)
你对线程发生的事情的解释是正确的。您正在新线程上执行请求,并且将在UI线程上调用subscribe()中的lambda
您可以在lambda函数中编写其余代码。您可以访问周围的类并将其存储在那里的字段中,或者从那里访问数据库类/方法。请注意,如果要在此处访问ui,则只需要在主线程上进行观察。如果您只想保存它,可以删除observeOn()调用并保留在后台线程中。另外,我建议对subscribeOn()使用Schedulers.io(),因为它是一个用于io操作的线程池,包括网络操作和数据库访问。