我创建了用@XMLRootElement注释的Account类,并用@Path(“ /”)注释了一个服务类,在其中,我在静态块中创建了两个Account对象,并将它们添加到Account类型的List中。在同一服务中,我做了一个方法:
@GET
@Path("/accounts")
@Produces(MediaType.APPLICATION_JSON)
public List<Account> getAccounts(){
return accounts;
}
由于我在TomEE服务器上运行它,所以我的完整URL是:
http://localhost:8080/android/accounts
然后我用邮递员对其进行了测试,并获得了JSON对象以及成功的响应。
在android中,我使用完全相同的字段制作了相同的类(帐户)。之后,我创建了 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,但在第1行第2列路径$处为BEGIN_OBJECT”
答案 0 :(得分:1)
失败表明json响应以对象标记“ {”开始,但是您的模型类需要列表标记“ [”。
我的猜测是您的服务器仅返回1个帐户,而您的改造响应类型定义为帐户列表。