Android:通过改造在ApiService中选择响应json的一部分

时间:2018-03-30 17:06:53

标签: android retrofit2 android-json

我在Android中使用Rx,改装,匕首和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:期望一个字符串,但是第1行第2行路径为BEGIN_OBJECT $

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

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

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

只需使用此链接为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);