Android Retrofit2解析JSON数组:如何获取User对象数组
解决Retrofit2获取User对象数组的问题
兄弟,其实你已经成功拿到User对象的集合了!先别慌,咱们一步步理清楚:
你已经获取到User对象了,不是JSON!
从你贴的日志和代码来看,Retrofit已经帮你把服务器返回的JSON自动转换成了List<User>集合——日志里打印的User{id=1, name='aaaaaaaaaa',...}就是你的User类调用toString()方法输出的对象内容,这完全不是JSON格式,实打实是Java对象的字符串表示。
你可以直接操作users里的每一个User对象,比如:
for(User user: users){ Log.e("USER ID", String.valueOf(user.getId())); Log.e("USER NAME", user.getName()); // 任何User类里的属性和方法都能直接调用 }
如果确实需要User[]数组而非List
如果你的业务逻辑必须用数组而不是List,有两种简单的方式:
方式1:把已有的List转成数组
在onResponse里拿到users之后,直接转成数组:
if(response.isSuccessful()){ List<User> userList = response.body(); // 转成User数组 User[] userArray = userList.toArray(new User[userList.size()]); // 现在userArray就是你要的User对象数组了 for(User user : userArray){ Log.e("USER ARRAY", user.toString()); } }
方式2:修改Retrofit接口直接返回数组
直接修改你的ApiService接口方法,把返回类型从Call<List<User>>改成Call<User[]>:
// 原接口方法 // Call<List<User>> getUsers(); // 修改后的接口方法 Call<User[]> getUsers();
然后在回调里直接接收数组:
call.enqueue(new Callback<User[]>() { @Override public void onResponse(Call<User[]> call, Response<User[]> response) { if(response.isSuccessful()){ User[] userArray = response.body(); // 直接操作数组即可 for(User user : userArray){ Log.e("USERS LIST", user.toString()); } } } @Override public void onFailure(Call<User[]> call, Throwable t) { // 别忘了处理请求失败的情况 Log.e("ERROR", "获取用户列表失败", t); } });
另外提醒一句:你代码里注释掉的listView.setAdapter部分,直接用users这个List就能正常适配,完全不需要转成数组哦!
内容的提问来源于stack exchange,提问作者Fares Ben Slama
相关产品推荐
相关产品推荐

