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;
    }
}

これは Retrofit 呼び出しです。

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

私が間違っていることについてのアイデアはありますか?

4

2 に答える 2

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 に答える