android - Retrofit 2 抛出错误 Expected BEGIN_ARRAY but was BEGIN_OBJECT

标签 android retrofit

您好,我是 Retrofit 2.0 库的新手,我在解析某些 json 时遇到问题。我已经查看了 Stackoverflow 上的其他一些解决方案,但对我的问题不太满意。我正在尝试使用改造 2.0 从 android 调用 api。但它抛出错误 Expected BEGIN_ARRAY but was BEGIN_OBJECT。

我对 web api 的回应是:

{
    "items": [{
        "id": 19,
        "lat": 23.79418,
        "lng": 90.401859,
        "user_id": 1,
        "created_at": null,
        "updated_at": null,
        "user": {
            "id": 1,
            "name": "Tarif",
            "email": "fmt@itc.com",
            "created_at": null,
            "updated_at": null
        }

    }]
}

我的模型类是这样的:

    public class UserResponse {
    private List<Items> items;
    public List<Items> getItems() {
        return items;
    }
    private class Items{
        private String id;
        private String lat;
        private String lng;
        private String user_id;
        private String created_at;
        private String updated_at;
        private List<User> user;

        private class User{
            private String id;
            private String name;
            private String email;
            private String created_at;
            private String updated_at;

            public String getId() {
                return id;
            }

            public String getName() {
                return name;
            }

            public String getEmail() {
                return email;
            }

            public String getCreated_at() {
                return created_at;
            }
            public String getUpdated_at() {
                return updated_at;
            }


        }
        public String getId() {
            return id;
        }
        public String getLat() {
            return lat;
        }
        public String getLng() {
            return lng;
        }
        public String getUser_id() {
            return user_id;
        }
        public String getCreated_at() {
            return created_at;
        }
        public String getUpdated_at() {
            return updated_at;
        }
        public List<User> getUser() {
            return user;
        }
    }
}

这是我的界面:

@GET("coordinates")
 Call <UserResponse> getUsers();

我是这样调用的:

ITCService service = ApiUtils.createService(ITCService.class);
        Call<UserResponse> call= service.getUsers();
        call.enqueue(new Callback<UserResponse>() {
            @Override
            public void onResponse(Call<UserResponse> call, retrofit2.Response<UserResponse> response) {

                if (response.isSuccessful()) {
                    UserResponse res = response.body();
                    Log.e("TAG", res.toString());

                } else {
                    // TODO: toast
                    Toast.makeText(getApplicationContext(),response.message(),Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<UserResponse> call, Throwable t) {
                // TODO: error alert

                Toast.makeText(getApplicationContext(),t.getMessage(),Toast.LENGTH_SHORT).show();
            }
        });

    }

最佳答案

List<User>应该是 HashMap<String,Object>不是列表,因为它是 JSONObject不是 JSONArray .由于您在项目本身中定义用户类,只需使用 User而不是列表。不需要 HashMap .

关于android - Retrofit 2 抛出错误 Expected BEGIN_ARRAY but was BEGIN_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733142/

相关文章:

android - 让所有 Observables 订阅并观察某事

安卓改造错误

javascript - 将数组从 Activity 传递到 Javascript

android - Xamarin Forms Android 按钮 Material 阴影

android - 具有彩色背景和波纹效果的 ListView 选择器

android - 使用改造和 rx java 的多个 api 请求

android - 无法使用 SimpleXML 和 Retrofit 解析带有 CDATA block 的 xml

javascript - 重定向到 Play 商店

android - 如何在Android Studio中使用Gradle链接外部文件/文件夹(Eclipse的linkedresources功能)

android - Retrofit 返回错误 401,Android 4.4.2 的 NullPointerException