简体   繁体   English

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

[英]How to Parse Array inside Object With Retrofit Android

I am new of Retrofit Library , I used to use Volley I am trying to parse array inside the object but I can't get how to do it here is my Json response 我是Retrofit Library的新手,我曾经使用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"
                }
            ]
        }
    }

I want to take the customers array from the response response here is customer model : 我想从响应中获取客户数组,这里是客户模型:

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;
    }
}

and here is Data Service interface: 这是数据服务接口:

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

can you please help me to understand how to parse it and thank you . 能否请您帮我了解如何解析它,谢谢。

Make another POJO class which will have List like this 制作另一个POJO类,它将具有这样的List

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;
    }
}

Then in your Data Service Interface 然后在您的数据服务界面

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

And then you can get the List of customers like this after getting the body from retrofit call 然后,从改造电话获得车体后,您可以得到这样的客户列表

reponse.getCustomers();

the right , api should return only list of customer json 在正确的api应该只返回客户json的列表

or you should update your respone to 否则您应该将响应更新为

    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();

When we parse objects we need to start from top of Json. 解析对象时,我们需要从Json的顶部开始。

So first you need to get "response" key, then it's inner objects : Customer's array. 因此,首先您需要获取“响应”键,然后才是内部对象:客户的数组。

For this add 1 class named CustomersData.java which includes Response.java object, Response.java container array of customers : 为此,添加1个名为CustomersData.java类,其中包括Response.java对象,客户的Response.java容器数组:

CustomersData.java : CustomersData.java:

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

Response.java Response.java

public class Response {

        @SerializedName("code")
        public String code;

        @SerializedName("success")
        public boolean customers;

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

And to get data using Retrofit call it like : 并使用Retrofit来获取数据,方法如下:

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

Access it using : 使用访问它:

ArrayList <Customer> array = customersData.response.customers;

Use this website to create your model/pojo class. 使用此网站可以创建模型/ pojo类。 Later rename them. 稍后重命名它们。
Don't forget to add @SeralizedName("name_like_your_json") this below code in your pojo class. 不要忘记在pojo类中的以下代码中添加@SeralizedName("name_like_your_json")此代码。 (For every variable you want to access) (对于您要访问的每个变量)

@SerializedName("id")
private Integer id 

Your model class will be look like this. 您的模型类将如下所示。

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;
}}

After this in your interface just use this. 之后,在您的界面中使用它即可。

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

Look at the above code. 看上面的代码。 Your json response starts with Json Object. 您的json响应以Json Object开头。 So Our call must be object. 因此,我们的呼吁必须是客观的。 In this situation our object is Example class. 在这种情况下,我们的对象是Example类。 Inside this another object called Response. 在此内部,另一个对象称为Response。 In that class our desi 在那堂课中,我们的设计

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM