Rest API входит в проблему метода onFailure () - retrofit2 - PullRequest
0 голосов
/ 11 мая 2019

Я создал класс Account, который аннотировал @XMLRootElement, и я создал класс сервиса, аннотированный @Path ("/"), внутри которого в статическом блоке я создал пару объектов Account и добавил их в список типа Account.В той же службе я создал метод:

@GET
@Path("/accounts")
@Produces(MediaType.APPLICATION_JSON)
public List<Account> getAccounts(){
    return accounts;
}

Поскольку я запускаю его на сервере TomEE, мой полный URL-адрес:

http://localhost:8080/android/accounts

Затем я протестировал его с почтальоном иполучил json объекты вместе с успешным ответом.

В Android я создал один и тот же класс (Account) с точно такими же полями.После этого я сделал интерфейс RestService :

public interface RestService {

    @GET("accounts")
    Call<List<Account>> getAccounts();
}

И в своей основной деятельности я пытаюсь получить данные с сервера, используя библиотеку retrofit2 , выполнив этот метод:

private void RetrofitAccounts(){

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://192.168.1.9:8080/android/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RestService restService = retrofit.create(RestService.class);

    Call<List<Account>> call = restService.getAccounts();
    call.enqueue(new Callback<List<Account>>() {
        @Override
        public void onResponse(Call<List<Account>> call, Response<List<Account>> response) {
            Data.accounts = response.body();
            //Data.accounts is my list of type Account
            Log.i("SUCCESS","ACCOUNTS");
        }

        @Override
        public void onFailure(Call<List<Account>> call, Throwable t) {
            Log.i("FAILURE","ACCOUNTS");
            t.printStackTrace();
        }
    });
}

Когда я запускаю приложение, кажется, что оно всегда входит в метод onFailure ().

PrintStackTrace сообщает: «java.lang.IllegalStateException: ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в строке 1, путь 2 столбца $»

1 Ответ

1 голос
/ 11 мая 2019

Ошибка говорит о том, что ответ json начинается с тега объекта "{", но ваш класс модели ожидает тег списка "[".

Я предполагаю, что ваш сервер возвращает только 1 учетную запись, пока ваш ответТип для модернизации определяется как список учетных записей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...