2016-12-30 3 views
0

Я пытаюсь получить некоторые данные с помощью «Дооснащения», и я получаю эту ошибку. Я понимаю, что это ошибка, но я не знаю, как это исправить:Дооснащение Ожидаемое BEGIN_OBJECT, но было BEGIN_ARRAY в методе GET

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ 

Я пытался найти ответ на другие вопросы здесь, но я не могу найти ничего подобного моей проблемы ...

Мой интерфейс код:

public interface ApiInterface { 
    @GET("api/category") 
    Call<Category> getBusinessCategory(); 

} 

Мой класс код для вызова дооснащения:

private Call<Category> mCall; 

    mCall = apiService.getBusinessCategory(); 
     mCall.enqueue(new Callback<Category>() { 
      @Override 
      public void onResponse(Call<Category> call, Response<Category> response) { 

       if (response.isSuccess()) { 
        Log.e(TAG, response.toString()); 

       } else { 
        Toast.makeText(getApplication(), "No conexion", Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onFailure(Call<Category> call, Throwable t) { 
       Log.e(TAG, t.toString()); 
      } 
     }); 

И это JSON:

[ 
    { 
    "id": 1, 
    "name": "FOOD", 
    "imageRef": "v1475594353/categories/a", 
    "translate": null 
    }, 
    { 
    "id": 2, 
    "name": "CAR", 
    "imageRef": "v1475594195/categories/b", 
    "translate": null 
    } 
] 

Категория Класс:

public class Category implements Serializable { 
    @SerializedName("category") 
    @Expose 
    private final static String TAG = "Category"; 
    private String imageRef = ""; 
    private Long id; 
    private String name; 
    private String translate; 
    private transient Bitmap image; 
... Getters and setters 

ApiClient класс

public class ApiClient { 

    public static final String BASE_URL = "http://xxxxx/"; 
    private static Retrofit retrofit = null; 


    public static Retrofit getClient() { 
     if (retrofit==null) { 
      retrofit = new Retrofit.Builder() 
        .baseUrl(BASE_URL) 
        .addConverterFactory(GsonConverterFactory.create()) 
        .build(); 
     } 
     return retrofit; 
    }} 
+0

вы можете включить код для 'Category' –

+0

hi john, только что добавил –

+0

В ответ вы можете увидеть, что сервер возвращает вам массив, измените Call на вызов <Список >. – b2mob

ответ

1

Здесь я отредактировал код:

public interface ApiInterface { 
    @GET("api/category") 
    Call<List<Category>> getBusinessCategory(); 
} 

Вашего API возвращает массив, но вы пытаетесь бросить его к одному объекту.

Edit:

private Call<List<Category>> mCall; 
    mCall = apiService.getBusinessCategory(); 
     mCall.enqueue(new Callback<List<Category>>() { 
      @Override 
      public void onResponse(Call<List<Category>> call, Response<List<Category>> response) { 

       if (response.isSuccess()) { 
        Log.e(TAG, response.toString()); 

       } else { 
        Toast.makeText(getApplication(), "No conexion", Toast.LENGTH_SHORT).show(); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<Category>> call, Throwable t) { 
       Log.e(TAG, t.toString()); 
      } 
     }); 
+0

Это изменение дает мне несовместимую ошибку в этой строке: mCall = apiService.getBusinessCategory(); –

+0

также вам нужно изменить свою реакцию. я отредактирую свой код. – savepopulation

+0

да, пожалуйста .... –

0

Проблема произошла потому, что вы пытаетесь разобрать массив объекта, исправить реализацию бэкэнда или изменить код, как показано ниже:

Ваш исправлен интерфейс:

public interface ApiInterface { 
@GET("api/category") 
Call<List<Category>> getBusinessCategory(); } 

И переменные mCall:

private Call<List<Category>> mCall; 
Смежные вопросы