gpt4 book ai didi

java - Android、Retrofit、RxJava - 将多个实体的字段合并为一个实体

转载 作者:行者123 更新时间:2023-12-01 20:21:22 35 4
gpt4 key购买 nike

请看下面我的代码。我从城市检索类别的代码:

mcityAPI.authDevice(req)
.subscribeOn(Schedulers.io())
.flatMap(token -> mcityAPI.getCategories("/city/599/category",prepareHeaders(token)))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(categoryList->
{
HashMap<String, String> categoryNamesMap = new HashMap<>();
for (Category category : categoryList)
{
categoryNamesMap.put(category.getId(), category.getName());
}

}

, throwable ->
{
Throwable error = throwable;
String err = error.toString();
});

因此,第一个设备需要获得授权 - authDevice。然后,需要提供token来调用getCategories(实际上,应该先通过调用prepareHeaders将token转换为header)

到目前为止,它有效。我能够成功加载类别。下一步是获取事件。在这种情况下,我应该调用 /city/599/event,但我需要按如下方式执行:

  • 再次提供 header (如何访问之前检索到的 token ?)
  • 我的 Event 的 pojo 模型类包含一个名为 categoryName 的额外字段。每个返回的事件都将包含名为 categoryId 的字段。我还添加了一个额外的字段 categoryName。对于每个返回的类别,我需要为 categoryName 额外字段分配适当的值。类别名称应通过 categoryId
  • categoryList 检索

是否有任何优雅的方式(一些 rxJava 运算符等)允许做我想做的事情?

最佳答案

据我了解,您的 token 是按设备分配的,因此您可以存储它以供以后使用。

首先:

  • 获取您的 token 并将其存储在例如 SharedPreferences 中。这将使您可以从您需要的每个地方访问 token 。

其次:

  • 现在您可以在同一个流中发出两个请求。

  • 请记住正确使用subscribeOn。它仅适用于上游和下游的observeOn。这意味着您正在 MainTread 上请求,因此您应该更改它。

  • 可以使用算子map来获取categoriesMap;

  • 您应该注意错误处理,因为一次失败将取消订阅您的流,因此无法再次使用它。

      triggerSubject
.flatMap(token -> mcityAPI.getCategories("/city/599/category",prepareHeaders(sharedPreferences.getToken())))
.map(categoryList -> {
final HashMap<String, String> categoryNamesMap = new HashMap<>();
for (Category category : categoryList)
{
categoryNamesMap.put(category.getId(), category.getName());
}
return categoryNamesMap;
})
.flatMap(cateogyrNameMap -> yourApiCall, prepareHeaders(sharedPreferences.getToken()))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retry()
.subscribe(event -> {
// Do what you need
}

, throwable ->
{
Throwable error = throwable;
String err = error.toString();
});

关于java - Android、Retrofit、RxJava - 将多个实体的字段合并为一个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44623351/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com