Android:通过改造在ApiService中选择一部分response json

标签 android retrofit2 android-json

我在 android 中使用 Rx、retrofit、dagger 和 MVP 模型。来自服务器的响应就像打击:

"User": {
    "Address": "     ",
    "BirthDate": "1395/09/28",
    "ConditionFields": [],
    "CreateDate": "/Date(1482048048370+0330)/",
    "Enabled": true,
    "Export": " ",
    "FirstName": "kia",
    "GUID": "1eaceb23-eace-4cf0-be4d-6d5be338ca46",
    "Groups": [],
    "JobLocation": "2D2722C1-B9AC-4849-AE12-89FCBF6A3A2D",
    "JobLocationName": "",
    "JobLocations": {..},
    ....

这是我的 json 响应的一部分。这个响应是一个巨大的 json 对象。在我的 api 服务中,我的方法返回 Observable>。这是完整的 api 服务:

@POST(UrlManager.LOGIN+"CheckOtherUserLogin")
Observable<Response<String>> getUserLogin(
        @Body RequestBody params);

当我运行我的应用程序时出现此错误:

java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 2 path $

我想我知道我的问题是什么,这个错误是因为服务器返回了 json object但我声明Response<String> .

正如我之前所说,服务器的响应很大,我的应用程序中没有使用 must of 属性,我不想创建具有所有属性的 pojo 类来存储所有 json 信息在内存中并消耗设备的内存。因此,我想在 api 服务方法中选择 json 响应的一部分。

我该怎么做?

最佳答案

使用此链接为 JSON 简单地创建 POJO 类 http://www.jsonschema2pojo.org/

生成 POJO 后删除不需要的字段。

Observable<Response<String>> 更改您的方法返回类型

@POST(UrlManager.LOGIN+"CheckOtherUserLogin")
Observable<Response<String>> getUserLogin(@Body RequestBody params);

收件人Observable<YourPojo>

@POST(UrlManager.LOGIN+"CheckOtherUserLogin")
Observable<YourPojo> getUserLogin(@Body RequestBody params);

关于Android:通过改造在ApiService中选择一部分response json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578444/

相关文章:

java - 无法将文本附加到文件

android - 如何知道 Retrofit 调用何时完成

android - 使用GSON对Android进行json封装

android - 在 View 寻呼机中加载多个选项卡内容而无需再次获取

java - 通过带有 JSON 响应的关键字搜索 Shopify 产品

java - Android 开发初学者遇到问题

c# - 如何在 xamarin 表单中以 Android 样式使用 App.xaml 中定义的颜色

java - 执行cursor.getCount() 时崩溃(Android)

android - 如何从android中的图库上传多张图片?

java - Retrofit 2 API 我可以使用本地文件路径或 json 字符串而不是 url 吗?