【问题标题】:Retrofit throwing error Expected BEGIN_ARRAY but was BEGIN_OBJECT改造抛出错误应为 BEGIN_ARRAY 但为 BEGIN_OBJECT
【发布时间】:2014-12-03 15:57:12
【问题描述】:

您好,我是 Retrofit 库的新手,我在解析一些 json 时遇到问题。我在 Stackoverflow 上查看了其他一些解决方案,但对我的问题不太满意。我试图让一个简单的网络服务工作。任何建议将不胜感激..

json文件

{"employees":[
{"firstName":"John", "lastName":"Doe"}, 
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}

请求方法

public void requestEmployeeData(String uri){
        RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ENDPOINT).build();
        EmployeesAPI employeesAPI =adapter.create(EmployeesAPI.class);
        employeesAPI.getEmployees(new Callback<List<Employees.employeesclass>>() {
            @Override
            public void success(List<Employees.employeesclass> employees, Response response) {
                List<String> names = new ArrayList<String>();
                Log.v("nas", "The Employees Webservice Success" + response);
            }

            @Override
            public void failure(RetrofitError retrofitError) {
                Log.v("nas", "The Employees Webservice Failed " + retrofitError);
            }
        });
    }

Employees.java

public class Employees {
// List<String> listOfStrings = new ArrayList<String>();
@SerializedName(value="employees")
public List<Employees> employees;

public void setEmployees(List<Employees> employees) {
    this.employees = employees;

}

public static class employeesclass {
    String firstName;
    String lastName;


    @Override
    public String toString() {
        return (firstName + " " + lastName);

    }
}

}

EmployeesAPI.java

public interface EmployeesAPI {
@GET("/get_names.json")
public void getEmployees(Callback<List<Employees.employeesclass>> response);
}

我得到的错误是

The Employees Webservice Failed retrofit.RetrofitError: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

我理解错误是说数据是一个对象,它应该以一个数组开头,但我无法解决。谢谢

【问题讨论】:

    标签: android json gson retrofit


    【解决方案1】:

    您正在混合使用 Employeesemployeesclass 课程。尝试改用这个:

    public class Employees {
    
        @SerializedName(value="employees")
        public List<employeesclass> employees;
    
        public void setEmployees(List<employeesclass> employees) {
            this.employees = employees;
    
        }
    
        // employeesclass definition
    
    }
    

    然后相应地更改您的界面和requestEmployeeData方法

    public interface EmployeesAPI {
        @GET("/get_names.json")
        public void getEmployees(Callback<Employees> response);
    }
    

    【讨论】:

    • 还将Employees/employeesclass 重命名为EmployeesWrapper/Employee 之类的名称应该更容易理解。
    猜你喜欢
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 2017-01-19
    • 2017-05-16
    • 2016-04-27
    • 2020-02-03
    • 2020-07-26
    • 1970-01-01
    相关资源
    最近更新 更多