You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:27:31