如何使用翻新Android解析对象内部的数组

时间:2018-09-03 10:03:46

标签: java android arrays json retrofit

我是Retrofit库的新手,曾经使用Volley 我正在尝试解析对象内部的数组,但我不知道该怎么做 这是我的Json回复

  {
        "response": {
            "code": "1",
            "success": true,
            "customers": [
                {
                    "id": 1,
                    "name": "reem",
                    "customer_type": "1",
                    "address": "45سسسس",
                    "mobile_no": "05684412211",
                    "phone_no": "414511555",
                    "created_at": "2018-07-30 08:26:48",
                    "updated_at": "2018-07-30 08:26:48"
                }
            ]
        }
    }

我想从响应中获取客户数组 这是客户模型:

public class Customer {

    @SerializedName("id")
    private Integer id;
    @SerializedName("customer_type")
    private Integer customer_type;
    @SerializedName("name")
    private String name;
    @SerializedName("address")
    private String address;
    @SerializedName("mobile_no")
    private String mobile_no;
    @SerializedName("phone_no")
    private String phone_no;

    public Customer(Integer id, Integer customer_type, String name, String address, String mobile_no, String phone_no) {
        this.id = id;
        this.customer_type = customer_type;
        this.name = name;
        this.address = address;
        this.mobile_no = mobile_no;
        this.phone_no = phone_no;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getCustomer_type() {
        return customer_type;
    }

    public void setCustomer_type(Integer customer_type) {
        this.customer_type = customer_type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getMobile_no() {
        return mobile_no;
    }

    public void setMobile_no(String mobile_no) {
        this.mobile_no = mobile_no;
    }

    public String getPhone_no() {
        return phone_no;
    }

    public void setPhone_no(String phone_no) {
        this.phone_no = phone_no;
    }
}

这是数据服务接口:

@GET("get_customers")
    Call<List<Customer>> getAllCustomer();

请帮助我了解如何解析它,谢谢。

4 个答案:

答案 0 :(得分:7)

制作另一个具有这样的List的POJO类

public class Response{

    @SerializedName("response")
    private Response response;

    @SerializedName("code")
    private String code;

    @SerializedName("success")
    private boolean success;

    @SerializedName("customers")
    private List<Customers> customers;

    public void setResponse(Response response){
        this.response = response;
    }

    public Response getResponse(){
        return response;
    }

    public void setCode(String code){
        this.code = code;
    }

    public String getCode(){
        return code;
    }

    public void setSuccess(boolean success){
        this.success = success;
    }

    public boolean isSuccess(){
        return success;
    }

    public void setCustomers(List<Customers> customers){
        this.customers = customers;
    }

    public List<Customers> getCustomers(){
        return customers;
    }
}

然后在您的数据服务界面中

@GET("get_customers")
Call<Response> getAllCustomer();

然后从翻新请求中获取主体后,您就可以得到这样的客户列表

reponse.getCustomers();

答案 1 :(得分:1)

正确的api应该只返回客户json列表

或者您应该将响应更新为

    public class Customer
{
    public int id { get; set; }
    public string name { get; set; }
    public string customer_type { get; set; }
    public string address { get; set; }
    public string mobile_no { get; set; }
    public string phone_no { get; set; }
    public string created_at { get; set; }
    public string updated_at { get; set; }
}

public class Response
{
    public string code { get; set; }
    public bool success { get; set; }
    public List<Customer> customers { get; set; }
}

public class RootObject
{
    public Response response { get; set; }
}

    @GET("get_customers")
Call<RootObject> getAllCustomer();

答案 2 :(得分:0)

解析对象时,我们需要从Json的顶部开始。

因此,首先需要获得“响应”键,然后才是内部对象:客户的数组。

为此,添加1个名为public class HelloWorldInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{ApplicationConfig.class}; } @Override protected Class<?>[] getServletConfigClasses() { return null; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } } 的类,其中包括CustomersData.java对象,Response.java个客户容器数组:

CustomersData.java:

Response.java

Response.java

public class CustomersData {
    @SerializedName("response")
    public Response response;
}

要使用Retrofit获得数据,请像这样

public class Response {

        @SerializedName("code")
        public String code;

        @SerializedName("success")
        public boolean customers;

        @SerializedName("customers")
        public ArrayList<Customer> customers;
    }

使用:

进行访问
@GET("get_customers")
    Call< CustomersData > getAllCustomer();

答案 3 :(得分:0)

使用此uint8_t can't be printed with cout创建模型/ pojo类。稍后重命名。
不要忘了在您的pojo类中添加以下代码@SeralizedName("name_like_your_json")。 (对于您要访问的每个变量)

@SerializedName("id")
private Integer id 

您的模型类将如下所示。

public class Customer {

private Integer id;
private String name;
private String customerType;
private String address;
private String mobileNo;
private String phoneNo;
private String createdAt;
private String updatedAt;

public Integer getId() {
    return id;
}

public void setId(Integer id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getCustomerType() {
    return customerType;
}

public void setCustomerType(String customerType) {
    this.customerType = customerType;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public String getMobileNo() {
    return mobileNo;
}

public void setMobileNo(String mobileNo) {
    this.mobileNo = mobileNo;
}

public String getPhoneNo() {
    return phoneNo;
}

public void setPhoneNo(String phoneNo) {
    this.phoneNo = phoneNo;
}

public String getCreatedAt() {
    return createdAt;
}

public void setCreatedAt(String createdAt) {
    this.createdAt = createdAt;
}

public String getUpdatedAt() {
    return updatedAt;
}

public void setUpdatedAt(String updatedAt) {
    this.updatedAt = updatedAt;
}}

public class Example {

private Response response;

public Response getResponse() {
    return response;
}

public void setResponse(Response response) {
    this.response = response;
}}


public class Response {

private String code;
private Boolean success;
private List<Customer> customers = null;

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public Boolean getSuccess() {
    return success;
}

public void setSuccess(Boolean success) {
    this.success = success;
}

public List<Customer> getCustomers() {
    return customers;
}

public void setCustomers(List<Customer> customers) {
    this.customers = customers;
}}

在您的界面中使用此功能之后。

@GET("get_customers")
Call<Example> getAllCustomer();

看上面的代码。您的json响应以Json Object开头。因此,我们的呼吁必须是客观的。在这种情况下,我们的对象是Example类。在此内部,另一个对象称为Response。在那堂课中我们的设计