0

尝试使用 Retrofit 解析 JSON 响应时出现以下错误: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

这是 JSON 响应的样子:

{
    "automobi": [{
        "Dealers": {
            "Dealer": [{
                "@attributes": {
                    "Id": "12",
                    "Name": "Barons Tokai",
                    "Region": "Western Cape",
                    "Status": "active",
                    "UniqueKey": "96ec67999ed613174efe17f697dc4695"
                }
            }, {
                "@attributes": {
                    "Id": "13",
                    "Name": "Barons Pietermaritzburg",
                    "Region": "KwaZulu-Natal",
                    "Status": "active",
                    "UniqueKey": "0f0637a035a9bc98ac67aa30ffc1367e"
                }
            }, {
                "@attributes": {
                    "Id": "36",
                    "Name": "Barons Bellville",
                    "Region": "Western Cape",
                    "Status": "active",
                    "UniqueKey": "9ec8f24fdee47f14ce56e9a3fc2689a4"
                }
            }, {
                "@attributes": {
                    "Id": "37",
                    "Name": "Barons Bruma",
                    "Region": "Gauteng",
                    "Status": "active",
                    "UniqueKey": "de7ac02f51463d94cb11947c1bf5589c"
                }
            }, {
                "@attributes": {
                    "Id": "38",
                    "Name": "Barons Culemborg",
                    "Region": "Western Cape",
                    "Status": "active",
                    "UniqueKey": "de2d98530d1ac95218c2eb5d25d847b2"
                }
            }, {
                "@attributes": {
                    "Id": "39",
                    "Name": "Barons N1 City",
                    "Region": "Western Cape",
                    "Status": "active",
                    "UniqueKey": "a055a9a6fa1c9a43cced2335ce6eefcb"
                }
            }, {
                "@attributes": {
                    "Id": "40",
                    "Name": "Barons Durban",
                    "Region": "KwaZulu-Natal",
                    "Status": "active",
                    "UniqueKey": "8e49cb3d88b54d144c6728a450b2f491"
                }
            }, {
                "@attributes": {
                    "Id": "41",
                    "Name": "Barons Woodmead",
                    "Region": "Gauteng",
                    "Status": "active",
                    "UniqueKey": "097722a842f43f0c59cfac14694b8443"
                }
            }]
        }
    }]
}

这是我的经销商课程:

public class Dealer {
    @SerializedName("Id")
    String mId;

    @SerializedName("Name")
    String mName;

    @SerializedName("Region")
    String mRegion;

    @SerializedName("UniqueKey")
    String mUniqueKey;

    public String getId() {
        return mId;
    }

    public void setId(String id) {
        this.mId = id;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        this.mName = name;
    }

    public String getRegion() {
        return mRegion;
    }

    public void setRegion(String region) {
        this.mRegion = region;
    }

    public String getUniqueKey() {
        return mUniqueKey;
    }

    public void setUniqueKey(String uniqueKey) {
        this.mUniqueKey = uniqueKey;
    }
}

这是改造电话:

@FormUrlEncoded
@POST("get_dealer_list.php")
Call<List<Dealer>> getDealers(@Field("listname") String listName, @Field("outputformat") String outputFormat);

关于我做错了什么的任何想法?

4

2 回答 2

1
  1. 创建以下类:

对于最小的孩子

"@attributes": { "Id": "12", "Name": "Barons Tokai", "Region": "Western Cape", "Status": "active", "UniqueKey": "96ec67999ed613174efe17f697dc4695" }

    public class DealerObject {
       @SerializedName("@attribute")
       Dealer attribute;

       public getAttribute() {
          return attribute;
       }
    }

对于下一个

“经销商”:[ { “@attributes”:{ “Id”:“12”,“名称”:“Barons Tokai”,“地区”:“西开普省”,“状态”:“活跃”,“UniqueKey”: "96ec67999ed613174efe17f697dc4695" } }, { "@attributes": { "Id": "13", "Name": "Barons Pietermaritzburg", "Region": "KwaZulu-Natal",“状态”:“活动”,“唯一密钥”:“0f0637a035a9bc98ac67aa30ffc1367e”}},{“@attributes”:{“ID”:“36”,“名称”:“贝尔维尔男爵”,“地区”:“西开普” ,“状态”:“活动”,“UniqueKey”:“9ec8f24fdee47f14ce56e9a3fc2689a4”}},{“@attributes”:{“Id”:“37”,“姓名”:“布鲁马男爵”,“地区”:“豪登”,“状态”:“活动”,“UniqueKey”:“de7ac02f51463d94cb11947c1bf5589c”}},{“@attributes”:{“Id”: “38”,“名称”:“Barons Culemborg”,“地区”:“西开普”,“状态”:“活动”,“UniqueKey”:“de2d98530d1ac95218c2eb5d25d847b2”} }, { "@attributes": { "Id": "39", "Name": "Barons N1 City", "Region": "Western Cape", "Status": "active", "UniqueKey": " a055a9a6fa1c9a43cced2335ce6eefcb" } }, { "@attributes": { "Id": "40", "Name": "Barons Durban", "Region": "KwaZulu-Natal",“状态”:“活动”,“UniqueKey”:“8e49cb3d88b54d144c6728a450b2f491”}},{“@attributes”:{“ID”:“41”,“名称”:“Barons Woodmead”,“地区”:“Gauteng”, “状态”:“活动”,“唯一密钥”:“097722a842f43f0c59cfac14694b8443”}}]UniqueKey": "8e49cb3d88b54d144c6728a450b2f491" } }, { "@attributes": { "Id": "41", "Name": "Barons Woodmead", "Region": "Gauteng", "Status": "active", " UniqueKey": "097722a842f43f0c59cfac14694b8443" } } ]UniqueKey": "8e49cb3d88b54d144c6728a450b2f491" } }, { "@attributes": { "Id": "41", "Name": "Barons Woodmead", "Region": "Gauteng", "Status": "active", " UniqueKey": "097722a842f43f0c59cfac14694b8443" } } ]Id": "41", "Name": "Barons Woodmead", "Region": "Gauteng", "Status": "active", "UniqueKey": "097722a842f43f0c59cfac14694b8443" } } ]Id": "41", "Name": "Barons Woodmead", "Region": "Gauteng", "Status": "active", "UniqueKey": "097722a842f43f0c59cfac14694b8443" } } ]

    public class DealerListObject {

       List<DealerObject> Dealer;

       public getDealer {
          return Dealer;
       }
    }

德勒斯大对象

“经销商”:{“经销商”:[{“@attributes”:{“Id”:“12”,“名称”:“Barons Tokai”,“地区”:“西开普”,“状态”:“活跃” , "UniqueKey": "96ec67999ed613174efe17f697dc4695" } }, { "@attributes": { "Id": "13", "Name": "Barons Pietermaritzburg", "Region": "KwaZulu-Natal”,“状态”:“活动”,“UniqueKey”:“0f0637a035a9bc98ac67aa30ffc1367e”}},{“@attributes”:{“Id”:“36”,“名称”:“Barons Bellville”,“地区” :“西开普”,“状态”:“活动”,“UniqueKey”:“9ec8f24fdee47f14ce56e9a3fc2689a4”}},{“@attributes”:{ "Id": "37", "Name": "Barons Bruma", "Region": "Gauteng", "Status": "active", "UniqueKey": "de7ac02f51463d94cb11947c1bf5589c" } }, { "@attributes": { "Id": "38", "Name": "Barons Culemborg", "Region": "Western Cape", "Status": "active", "UniqueKey": "de2d98530d1ac95218c2eb5d25d847b2" } }, { "@attributes": { "Id": "39", "Name": "Barons N1 City", "Region": "Western Cape", "Status": "active", "UniqueKey" :“a055a9a6fa1c9a43cced2335ce6eefcb”}},{“@attributes”:{“Id”:“40”,“姓名”:“德班男爵”,“地区”:“夸祖鲁-纳塔尔”,“状态”:“活动”,“UniqueKey”:“8e49cb3d88b54d144c6728a450b2f491”}},{“@attributes”:{“ID”:“41”,“名称”:“Barons Woodmead” ,“区域”:“Gauteng”,“状态”:“活动”,“UniqueKey”:“097722a842f43f0c59cfac14694b8443”}}]}“状态”:“活动”,“UniqueKey”:“8e49cb3d88b54d144c6728a450b2f491”}},{“@attributes”:{“ID”:“41”,“名称”:“Barons Woodmead”,“地区”:“Gauteng”, “状态”:“活动”,“UniqueKey”:“097722a842f43f0c59cfac14694b8443”}}]}“状态”:“活动”,“UniqueKey”:“8e49cb3d88b54d144c6728a450b2f491”}},{“@attributes”:{“ID”:“41”,“名称”:“Barons Woodmead”,“地区”:“Gauteng”, “状态”:“活动”,“UniqueKey”:“097722a842f43f0c59cfac14694b8443”}}]}UniqueKey": "8e49cb3d88b54d144c6728a450b2f491" } }, { "@attributes": { "Id": "41", "Name": "Barons Woodmead", "Region": "Gauteng", "Status": "active", " UniqueKey": "097722a842f43f0c59cfac14694b8443" } } ] }UniqueKey": "8e49cb3d88b54d144c6728a450b2f491" } }, { "@attributes": { "Id": "41", "Name": "Barons Woodmead", "Region": "Gauteng", "Status": "active", " UniqueKey": "097722a842f43f0c59cfac14694b8443" } } ] }{“Id”:“41”,“名称”:“Barons Woodmead”,“地区”:“Gauteng”,“状态”:“活动”,“UniqueKey”:“097722a842f43f0c59cfac14694b8443”}}]}{“Id”:“41”,“名称”:“Barons Woodmead”,“地区”:“Gauteng”,“状态”:“活动”,“UniqueKey”:“097722a842f43f0c59cfac14694b8443”}}]}} } ] }} } ] }

   public class BigDealerObject {

       List<DealerListObject> Dealers;

       public getBigDealerObject {
          return Dealers;
       }
    }

然后对于所有响应:

   public class DealerResponse {

       List<BigDealerObject> automobi;

       public getAutomobi {
          return automobi;
       }
    }

最后,调用:

Call<DealerResponse> getDealers(@Field("listname") String listName, @Field("outputformat") String outputFormat);
于 2016-02-01T11:11:11.633 回答
0

当然。如您所见,您的 JSON 响应以对象 ({}) 开头,而您尝试将其分配给列表 (List)。为了解决这个问题,您应该创建一个名为 Response 的类,其中包含以下字段和类:

public class Response {
    public DealersClass Dealers;
}

class DealersClass {
    public List<Dealer> Dealer;
}

Dealer 类是您构建的类。将来避免此类错误的一种简单方法是查看您的回复。当您看到 { 时,这意味着您应该将其与 Java 类匹配。当你看到 [ 这意味着你应该将它与一个 Java 列表相匹配。

希望能帮助到你。

于 2016-02-01T10:46:03.940 回答