使用 RxJava 2 和 Retrofit 2 从 Observable 对象中检索数据
Retrieving data from Observable object using RxJava 2 and Retrofit 2
我刚刚开始学习如何在 Android 中使用 RxJava 2 和 Retrofit 2。我已经学习了一些教程,并且能够从我的服务器中检索数据。我的问题是,轻松访问检索到的数据的标准方法是什么。目前 GSON 将其解析为一个对象,我打印了 toString,仅此而已。
我有这个接口来定义我的 POST 请求:
public interface FacebookAppLoginService {
@POST("app/fbapp_login")
Observable<User> getUser(@Body FacebookAccessToken facebookAccessToken);
}
我创建了 Retrofit 对象:
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://rocky-garden-56471.herokuapp.com/")
.build();
然后我创建一个对象来包含我的 POST 请求的 JSON 主体:
FacebookAccessToken facebookAccessToken = new FacebookAccessToken();
然后我从我的界面创建 Observable:
Observable<User> newUser = facebookAppLoginService.getUser(facebookAccessToken);
最后,我订阅了 observable,在主线程上观察,但在工作线程上执行请求(我认为),然后记录结果:
newUser.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userInfo -> {
Log.i("Server Call", "Received: " + userInfo.toString());
});
toString 正确打印出从服务器接收到的用户信息。使用我在 lambda 函数中获得的这个对象的标准方法是什么?我想将它存储在数据库中,或者至少将它保存在 activity 内的一个对象中。我应该怎么做?
你对线程发生的事情的解释是正确的。您正在新线程上执行请求,subscribe() 中的 lambda 将在 UI-thread
上调用
您可以将其余代码编写在 lambda 函数中。您可以访问周围的 class 并将其存储在那里的字段中或从那里访问数据库 class/method。注意这里如果想访问ui只需要在主线程上观察即可。如果你只想保存它,你可以删除 observeOn() 调用并留在后台线程中。此外,我建议对 subscribeOn() 使用 Schedulers.io(),因为它是一个线程池,用于 io 操作,包括网络操作和数据库访问。
我刚刚开始学习如何在 Android 中使用 RxJava 2 和 Retrofit 2。我已经学习了一些教程,并且能够从我的服务器中检索数据。我的问题是,轻松访问检索到的数据的标准方法是什么。目前 GSON 将其解析为一个对象,我打印了 toString,仅此而已。
我有这个接口来定义我的 POST 请求:
public interface FacebookAppLoginService {
@POST("app/fbapp_login")
Observable<User> getUser(@Body FacebookAccessToken facebookAccessToken);
}
我创建了 Retrofit 对象:
Retrofit retrofit = new Retrofit.Builder()
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.baseUrl("http://rocky-garden-56471.herokuapp.com/")
.build();
然后我创建一个对象来包含我的 POST 请求的 JSON 主体:
FacebookAccessToken facebookAccessToken = new FacebookAccessToken();
然后我从我的界面创建 Observable:
Observable<User> newUser = facebookAppLoginService.getUser(facebookAccessToken);
最后,我订阅了 observable,在主线程上观察,但在工作线程上执行请求(我认为),然后记录结果:
newUser.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(userInfo -> {
Log.i("Server Call", "Received: " + userInfo.toString());
});
toString 正确打印出从服务器接收到的用户信息。使用我在 lambda 函数中获得的这个对象的标准方法是什么?我想将它存储在数据库中,或者至少将它保存在 activity 内的一个对象中。我应该怎么做?
你对线程发生的事情的解释是正确的。您正在新线程上执行请求,subscribe() 中的 lambda 将在 UI-thread
上调用您可以将其余代码编写在 lambda 函数中。您可以访问周围的 class 并将其存储在那里的字段中或从那里访问数据库 class/method。注意这里如果想访问ui只需要在主线程上观察即可。如果你只想保存它,你可以删除 observeOn() 调用并留在后台线程中。此外,我建议对 subscribeOn() 使用 Schedulers.io(),因为它是一个线程池,用于 io 操作,包括网络操作和数据库访问。