改造:如何决定 class 成员?

Retrofit : How to decide the class members?

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

{"itemA":"data",
"itemB":"data",
"itemC":"data",
"ItemC":"",
"result_arr":[{"Val1":"A","Val2":"","id":"id","pr":"[=11=].00","sid":"a","cid":"a","price":"[=11=].00","cool_down":"0%","url":"","name":"Name"},
{"Val1":"A","Val2":"","id":"id","pr":"[=11=].00","sid":"a","cid":"a","price":"[=11=].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;
}

此响应的模型应该是什么样的?模型是如何从响应值导出的?

鉴于 JSON:

{
    "itemA": "data",
    "itemB": "data",
    "itemC": "data",
    "ItemD": "",
    "result_arr": [
        {
            "Val1": "A",
            "Val2": "",
            "id": "id",
            "pr": "[=10=].00",
            "sid": "a",
            "cid": "a",
            "price": "[=10=].00",
            "cool_down": "0%",
            "url": "",
            "name": "Name"
        },
        {
            "Val1": "A",
            "Val2": "",
            "id": "id",
            "pr": "[=10=].00",
            "sid": "a",
            "cid": "a",
            "price": "[=10=].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

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

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

您必须更改:

@SerializedName("status_code")

至:

@SerializedName("statusCode")

确保您的所有属性都遵循此规则,您就可以开始了。