Я создал класс 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 столбца $»