改造2:预期BEGIN_ARRAY

时间:2017-10-23 16:43:50

标签: android retrofit2

我第一次使用Retrofit2时遇到了这个错误:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

我知道我的问题是我的pojo课程,但我无法找到解决问题的正确方法。我创建了WCF Web服务,这个服务将我的用户类的Arraylist作为json返回给我。这是我通过海报来自wcf服务器的jsom响应:

{
"GetUsersResult": [
    {
        "CreationDateTime": "/Date(1508174478395)/",
        "Id": "8e601956-04ab-4464-9f84-c129141b8198",
        "Topic": "Topics",
        "UserInfo": {
            "Age": "15",
            "Email": "",
            "LastName": "choopani",
            "Name": "niloofar",
            "SimId": "89984320001079005854"
        },
        "UserName": "niloo"
    },...

根据我的回答,我创建了pojo课程:

public class User {

@SerializedName("UserInfo")
private ExpChild mChildrenList;
private String UserName, CreationDateTime,Id,Topic;


public User(String mUserName,String mCreationDateTime,String mId,
                 String mTopic) {
    UserName = mUserName;
    CreationDateTime = mCreationDateTime;
    Id = mId;
    Topic = mTopic;
}

这是我的客户端帖子方法的接口:

    @POST("json/GetUsers")
Call<List<User>> getAllUsers();

如您所见,我想返回一个用户列表。 之后,我创建了改造服务创建者,并在我的主要活动中使用了它:

        allUsers.enqueue(new Callback<List<User>>() {
        @Override
        public void onResponse(Call<List<User>> call, Response<List<User>> response) {
            List<User> users = response.body();
        }

        @Override
        public void onFailure(Call<List<User>> call, Throwable t) {
            Toast.makeText(MainActivity.this, "faild to connect", Toast.LENGTH_SHORT).show();
            Log.i("====>", "onFailure: "+ t.getMessage());
        }
    });

但我得到了上述错误!!我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

您的服务器返回一个JSON对象,但您的接口说它需要一个JSON数组。 (List类型)。

您需要有第二个对象来表示服务器的完整响应:

public class ServerResponse {
    @SerializedName("GetUsersResult")
    private List<User> users;

    ... Constructor and getters here
}

然后Retrofit接口应返回与返回的JSON匹配的Call<ServerResponse>,修复错误。