【问题标题】:Retrofit : How to decide the class members?改造:如何决定班级成员?
【发布时间】:2017-01-28 23:22:16
【问题描述】:

我一直在尝试为 Android 进行改造。响应为空。如果我的理解是正确的,这可能是因为 400 响应或我的模型类中的响应建模不正确。我得到的响应如下:

{"itemA":"data",
"itemB":"data",
"itemC":"data",
"ItemC":"",
"result_arr":[{"Val1":"A","Val2":"","id":"id","pr":"$0.00","sid":"a","cid":"a","price":"$0.00","cool_down":"0%","url":"","name":"Name"},
{"Val1":"A","Val2":"","id":"id","pr":"$0.00","sid":"a","cid":"a","price":"$0.00","cool_down":"0%","url":"","name":"Name"}]
,"statusCode":"200"}

我定义的模型如下:

API 结果

public class APIResultModel {
@SerializedName("itemA")
public String itemA;
@SerializedName("itemB")
public String itemB;
@SerializedName("itemC")
public String itemC;
@SerializedName("itemD")
public string itemD;
@SerializedName("results_arr")
public List<ProductModel> results_arr;
@SerializedName("status_code")
public String statusCode;
}

结果数组模型:

public class ResultArrayModel {
public String val1;
public String val2;
public String id;
public String pr;
public String sid;
public String cid;
public String price;
public String cool_down;
public String url;
public String name;
}

这个响应的模型应该是什么样的?模型是如何从响应值推导出来的?

【问题讨论】:

  • 你检查过 response.code(); 吗?
  • @AnixPasBesoin 是的,就是 200。
  • 你可以发布你的模型吗?
  • @AnixPasBesoin 看看吧。
  • 您的 pojo 属性 serializedName 应该与 json 对象匹配,因此在您的 pojo 中将结果更改为 result_arr。检查所有其他属性。

标签: java android gson models retrofit2


【解决方案1】:

查看您的代码,您似乎在使用Gson

为了让Gson 创建您的pojo,您的模型的serializedNames 必须与您收到的json 响应相匹配。

你必须改变:

@SerializedName("status_code")

到:

@SerializedName("statusCode")

确保您的所有属性都遵循此规则并且一切顺利。

【讨论】:

    【解决方案2】:

    鉴于 JSON:

    {
        "itemA": "data",
        "itemB": "data",
        "itemC": "data",
        "ItemD": "",
        "result_arr": [
            {
                "Val1": "A",
                "Val2": "",
                "id": "id",
                "pr": "$0.00",
                "sid": "a",
                "cid": "a",
                "price": "$0.00",
                "cool_down": "0%",
                "url": "",
                "name": "Name"
            },
            {
                "Val1": "A",
                "Val2": "",
                "id": "id",
                "pr": "$0.00",
                "sid": "a",
                "cid": "a",
                "price": "$0.00",
                "cool_down": "0%",
                "url": "",
                "name": "Name"
            }
        ],
        "statusCode": "200"
    }
    

    您的 api 结果模型可能是:

    public class APIResult {
    
        public String itemA;
    
        public String itemB;
    
        public String itemC;
    
        public String itemD;
    
        @SerializedName("results_arr")
        public List<Product> products;
    
        public String statusCode;
    }
    

    您的产品型号可能是:

    public class Product {
    
        @SerializedName("Val1")
        public String val1;
    
        @SerializedName("Val2")
        public String val2;
    
        public String id;
    
        public String pr;
    
        public String sid;
    
        public String cid;
    
        public String price;
    
        @SerializedName("cool_down")
        public String coolDown;
    
        public String url;
    
        public String name;
    }
    

    假设您使用的是 GSON,则仅当字段名称与 JSON 中的当前名称不同时,才应使用 SerializedName 注解。

    有些应用程序可以将 JSON 转换为 POJO,例如 Tyr

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2012-01-15
      • 2014-11-19
      相关资源
      最近更新 更多