2016-05-16 6 views
1

Ich benutze Retrofit und Parse-Ergebnis mit GSON. Ich weiß nicht warum, aber ich erhalten diese eineGSON wirft Erwartete BEGIN_ARRAY aber war BEGIN_OBJECT Fehler

Erwartet BEGIN_ARRAY aber war BEGIN_OBJECT in Zeile 1 Spalte 2 Pfad

Ich weiß, was dieser Fehler bedeutet aber nicht, den Grund zu sehen.

Dies ist meine Json Antwort

{"suggestions": [ 
{ 
    "value": "г Казань", 
    "unrestricted_value": "Респ Татарстан, г Казань", 
    "data": { 
    "qc_complete": null, 
    "qc_house": null, 
    "qc_geo": "4", 
    "postal_code": "420000", 
    "postal_box": null, 
    "country": "Россия", 
    "region_fias_id": null, 
    "region_kladr_id": null, 
    "region_with_type": "Респ Татарстан", 
    "region_type": "Респ", 
    "region_type_full": "республика", 
    "region": "Татарстан", 
    "area_fias_id": null, 
    "area_kladr_id": null, 
    "area_with_type": null, 
    "area_type": null, 
    "area_type_full": null, 
    "area": null, 
    "city_fias_id": null, 
    "city_kladr_id": null, 
    "city_with_type": "г Казань", 
    "city_type": "г", 
    "city_type_full": "город", 
    "city": "Казань", 
    "city_district": null, 
    "settlement_fias_id": null, 
    "settlement_kladr_id": null, 
    "settlement_with_type": null, 
    "settlement_type": null, 
    "settlement_type_full": null, 
    "settlement": null, 
    "street_fias_id": null, 
    "street_kladr_id": null, 
    "street_with_type": null, 
    "street_type": null, 
    "street_type_full": null, 
    "street": null, 
    "house_fias_id": null, 
    "house_kladr_id": null, 
    "house_type": null, 
    "house_type_full": null, 
    "house": null, 
    "block_type": null, 
    "block_type_full": null, 
    "block": null, 
    "flat_area": null, 
    "square_meter_price": null, 
    "flat_price": null, 
    "flat_type": null, 
    "flat_type_full": null, 
    "flat": null, 
    "fias_id": "93b3df57-4c89-44df-ac42-96f05e9cd3b9", 
    "fias_level": "4", 
    "kladr_id": "1600000100000", 
    "tax_office": "1600", 
    "tax_office_legal": null, 
    "capital_marker": "2", 
    "okato": "92401000000", 
    "oktmo": "92701000", 
    "timezone": null, 
    "geo_lat": "55.7943051", 
    "geo_lon": "49.1116709", 
    "beltway_hit": null, 
    "beltway_distance": null, 
    "unparsed_parts": null, 
    "qc": null 
    } 
} ]} 

Dies wird meine Modelle von pojogenerator erzeugt.

public class DadataResponse { 

@SerializedName("suggestions") 
@Expose 
private List<Suggestion> suggestions = new ArrayList<Suggestion>(); 

/** 
* 
* @return 
*  The suggestions 
*/ 
public List<Suggestion> getSuggestions() { 
    return suggestions; 
} 

/** 
* 
* @param suggestions 
*  The suggestions 
*/ 
public void setSuggestions(List<Suggestion> suggestions) { 
    this.suggestions = suggestions; 
} 

}

public class Suggestion { 

@SerializedName("value") 
@Expose 
private String value; 
@SerializedName("unrestricted_value") 
@Expose 
private String unrestrictedValue; 
@SerializedName("data") 
@Expose 
private Data data; 

/** 
* 
* @return 
*  The value 
*/ 
public String getValue() { 
    return value; 
} 

/** 
* 
* @param value 
*  The value 
*/ 
public void setValue(String value) { 
    this.value = value; 
} 

/** 
* 
* @return 
*  The unrestrictedValue 
*/ 
public String getUnrestrictedValue() { 
    return unrestrictedValue; 
} 

/** 
* 
* @param unrestrictedValue 
*  The unrestricted_value 
*/ 
public void setUnrestrictedValue(String unrestrictedValue) { 
    this.unrestrictedValue = unrestrictedValue; 
} 

/** 
* 
* @return 
*  The data 
*/ 
public Data getData() { 
    return data; 
} 

/** 
* 
* @param data 
*  The data 
*/ 
public void setData(Data data) { 
    this.data = data; 
} 

}

und die Datenklasse, aber es ist zu groß und müssen nicht es hier posten.

Warum bekomme ich diesen Fehler? Bitte helfen

UPD

public ApiService(String URLSTRING){ 

    RequestInterceptor requestInterceptor = new RequestInterceptor() { 
     @Override 
     public void intercept(RequestFacade request) { 
      request.addHeader("Authorization", "Token"); 
      request.addHeader("Content-Type","application/json"); 
      request.addHeader("Accept","application/json"); 
     } 
    }; 

    RestAdapter restAdapter = new RestAdapter.Builder() 
      .setEndpoint(URLSTRING) 
        .setRequestInterceptor(requestInterceptor) 
      .setLogLevel(RestAdapter.LogLevel.FULL) 
      .build(); 

    mApi = restAdapter.create(Api.class); 
} 

public interface Api{ 

    @GET("/address") 
    List<DadataResponse> getDadata(@Query("query") String query); 

} 
+1

Der fehlende Teil hier ist der Code, der Gson aufruft, um den JSON zu analysieren. Ihr Typ-Token ist wahrscheinlich falsch. – njzk2

+0

Nur eine Sache, Mann. Versuchen Sie einfach swift – SIgalGleb

+0

@ njzk2 Ich habe Retrofit Call –

Antwort

2

ändern

List<DadataResponse> getDadata(@Query("query") String query); 

zu

DadataResponse getDadata(@Query("query") String query); 

Erwartet BEGIN_ARRAY aber war BEGIN_OBJECT in Zeile 1 Spalte 2 Pfad

bedeutet, es erwartet ein Array (weil Sie es gesagt haben), aber es erhielt ein Objekt.

Es sieht so aus, als ob Sie eine einzelne DadataResponse und nicht eine Reihe von ihnen erhalten, also müssen Sie Ihre Unterschrift aktualisieren, um der Realität zu entsprechen.

+1

danke dude! –