2016-08-20 3 views
0

Я новичок, и я использую Модернизация 2 в моем приложении. У меня есть это JSON. (Я пробовал много решений, но ничего не работало для меня). Спасибо за вашу помощьОжидаемое BEGIN_OBRAY, но было BEGIN_OBJECT

ошибки, которые я имею: Ожидаемое BEGIN_ARRAY но BEGIN_OBJECT в строке 1 колонки 2

JSON

{ 
    responseCode: 1, 
    responseCodeText: "ok", 
    response: [ 
     { 
     lat: 67.2422432322, 
     lng: 25.1441441441, 
     title: "Point na mapě 1", 
     desc: "Lorem ipsum dolor sit amet, consectetur adipisicing elit.\nVero praesentium fugiat nobis pariatur cupiditate saepe dolorum, soluta dignissimos.", 
     photo: [ 
      "http://photo3.jpg", 
      "http://photo4.jpg", 
     ] 
     }, 
     { 
     lat: 39.1234787, 
     lng: 25.2242445, 
     title: "Point na mapě 2", 
     desc: "Possimus veritatis, neque a et odit ad itaque iusto asperiores perspiciatis voluptates,\nvero praesentium fugiat nobis pariatur cupiditate saepe dolorum, soluta dignissimos.", 
     photo: [ 
      "http://photo1.jpg", 
      "http://photo2.jpg", 
     ] 
     }, 
     //other 

Интерфейс

public interface PointsInterface { 

     String BASE_URL = "MY_URL/"; 

     @POST("getPointsOnMap") 
     Call<List<PointsOnMap>> getPointsOnMap(); 

     class Factory { 
      private static PointsInterface service; 

      public static PointsInterface getInstance() { 
       if (service == null) { 
        Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(BASE_URL).build(); 
        service = retrofit.create(PointsInterface.class); 
        return service; 
       } else { 
        return service; 
       } 
      } 
     } 
    } 

API вызова

// apiService

public void serviceInit() { 
     PointsInterface.Factory.getInstance().getPointsOnMap().enqueue(new Callback<List<PointsOnMap>>() { 
      @Override 
      public void onResponse(Call<List<PointsOnMap>> call, Response<List<PointsOnMap>> response) { 
       List<PointsOnMap> result = response.body(); 
       Log.d("response", "Number of points received: " + result.size()); 
      } 

      @Override 
      public void onFailure(Call<List<PointsOnMap>> call, Throwable t) { 
       Log.e("error", "Error"); 
      } 
     });} 

Модель

public class PointsOnMap { 

    @SerializedName("lat") private Double lat; 
    @SerializedName("lng") private Double lng; 
    @SerializedName("title") private String title; 
    @SerializedName("desc") private String desc; 

    public PointsOnMap(Double lat, Double lng, String title, String desc) { 
     this.lat = lat; 
     this.lng = lng; 
     this.title = title; 
     this.desc = desc; 
    } 

    public Double getLat() { 
     return lat; 
    } 

    public void setLat(Double lat) { 
     this.lat = lat; 
    } 

    public Double getLng() { return lng; } 

    public void setLng(Double lng) { 
     this.lng = lng; 
    } 

    public String getTitle() { return title; } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public String getDesc() { 
     return desc; 
    } 

    public void setDesc(String desc) { 
     this.desc = desc; 
    } 
} 

ответ

1

Ваш интерфейс дооснащения

 @POST("getPointsOnMap") 
    Call<List<PointsOnMap>> getPointsOnMap(); 

Должно быть

 @POST("getPointsOnMap") 
    Call<PointsOnMapResponse> getPointsOnMap(); 

где PointsOnMapResponse является

public class PointsOnMapResponse { 
    @SerializedName("responseCode") 
    long responseCode; 

    @SerializedName("responseCodeText") 
    String responseCodeText; 

    @SerializedName("response") 
    List<PointsOnMap> response; 

    //getters, setters 
} 
+0

Спасибо, но как получить свойства, такие как название, desc, lat и т. Д. От ответа? – Stepan

+0

Это будет в списке 'response.body(). GetResponse()' – EpicPandaForce

+0

Я получил его, спасибо большое – Stepan

1

в PointsInterface заменить

@POST("getPointsOnMap") 
Call<List<PointsOnMap>> getPointsOnMap(); 

в

@POST("getPointsOnMap") 
Call<PointsOnMap> getPointsOnMap(); 

, а также заменить

public void serviceInit() { 
    PointsInterface.Factory.getInstance().getPointsOnMap().enqueue(new Callback<List<PointsOnMap>>() { 
     @Override 
     public void onResponse(Call<List<PointsOnMap>> call, Response<List<PointsOnMap>> response) { 
      List<PointsOnMap> result = response.body(); 
      Log.d("response", "Number of points received: " + result.size()); 
     } 

     @Override 
     public void onFailure(Call<List<PointsOnMap>> call, Throwable t) { 
      Log.e("error", "Error"); 
     } 
    });} 

в

public void serviceInit() { 
    PointsInterface.Factory.getInstance().getPointsOnMap().enqueue(new Callback<PointsOnMap>() { 
     @Override 
     public void onResponse(Call<PointsOnMap> call, Response<PointsOnMap> response) { 
      PointsOnMap result = response.body(); 
      Log.d("response", "Number of points received: " + result.size()); 
     } 

     @Override 
     public void onFailure(Call<PointsOnMap> call, Throwable t) { 
      Log.e("error", "Error"); 
     } 
    });} 
+0

@ Степан решается? –

+0

Большое спасибо, но результат null. Я добавил класс модели, все в порядке? Ответ от сервера в порядке, поэтому проблема на моей стороне. – Stepan

1

это из-за

@POST("getPointsOnMap") 
Call<List<PointsOnMap>> getPointsOnMap(); 

Здесь вы удалить Список ваша ошибка будет устранена.

@POST("getPointsOnMap") 
Call<PointsOnMap> getPointsOnMap(); 

Успехов