Как создать класс pojo объекта ArrayList из ответа REST API? - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над проектом, в котором мне нужно реализовать API. Этот ответ API является объектами ArrayList. Не могли бы вы помочь мне с созданием его класса POJO и, если возможно, его реализацией. Я использую retrofit2 и GSON.

Как показано в следующей схеме JSON, названия брендов будут добавлены в brandsonly администратором, и он будет добавлен в allorders как массив, у которого есть несколько подобъекты.

Например, если администратор добавит Redmi в brandsonly, тогда он создаст Redmi[] в allorders

{
    "status": "success",
    "brandsonly": [
        {
            "_id": "",
            "brandname": "SAMSUNG",
        },
        {
            "_id": "",
            "brandname": "VIVO",
        },
        {
            "_id": "",
            "brandname": "NOKIA"
        },
        {
            "_id": "",
            "brandname": "IPHONE",
        }
    ],
    "allorders": {
        "SAMSUNG": [],
        "VIVO": [],
        "NOKIA": [],
        "IPHONE": [
            {
                "_id": "",
                "order_id": "",
                "__v": 0,
                "adminconfirmation": 1,
                "finalpricetodeduct": 30950
            },
            {
                "_id": "",
                "order_id": "",
                "__v": 0,
                "adminconfirmation": 1,
                "finalpricetodeduct": 
            }
        ]
    },
}

My Retrofit call из активности:

        final AllOrdersResponse allOrdersResponse = new AllOrdersResponse(userID);
        Call<AllOrdersResponse> responseCall = retrofit_interface.allOrderResponse(allOrdersResponse, "Bearer " + AuthToken);

        responseCall.enqueue(new Callback<AllOrdersResponse>() {
            @Override
            public void onResponse(@NotNull Call<AllOrdersResponse> call, @NotNull Response<AllOrdersResponse> response) {
                AllOrdersResponse response1 = response.body();
            
            }

            @Override
            public void onFailure(@NotNull Call<AllOrdersResponse> call, @NotNull Throwable t) {
                if (t instanceof SocketTimeoutException)
                    Toast.makeText(context, "Socket Time out. Please try again.", Toast.LENGTH_LONG).show();
                else
                    Toast.makeText(context, t.toString(), Toast.LENGTH_LONG).show();
            }
        });

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

В вашем JSON отсутствуют некоторые { и некоторые дополнительные ,. Итак, это ваш JSON фиксированный:

{
    "status": "success",
    "brandsonly": [
        {
            "_id": "",
            "brandname": "SAMSUNG"
        },
        {
            "_id": "",
            "brandname": "VIVO"
        },
        {
            "_id": "",
            "brandname": "NOKIA"
        },
        {
            "_id": "",
            "brandname": "IPHONE"
        }
    ],
    "allorders": {
        "SAMSUNG": [],
        "VIVO": [],
        "NOKIA": [],
        "IPHONE": [
            {
                "_id": "",
                "order_id": "",
                "__v": 0,
                "adminconfirmation": 1,
                "finalpricetodeduct": 30950
            },
            {
                "_id": "",
                "order_id": "",
                "__v": 0,
                "adminconfirmation": 1,
                "finalpricetodeduct": 30950
            }
        ]
    }
}

И это классы Pojo для хранения вашего JSON:

класса Allorders:


package com.example;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Allorders {

@SerializedName("SAMSUNG")
@Expose
private List<Object> sAMSUNG = null;
@SerializedName("VIVO")
@Expose
private List<Object> vIVO = null;
@SerializedName("NOKIA")
@Expose
private List<Object> nOKIA = null;
@SerializedName("IPHONE")
@Expose
private List<IPHONE> iPHONE = null;

public List<Object> getSAMSUNG() {
return sAMSUNG;
}

public void setSAMSUNG(List<Object> sAMSUNG) {
this.sAMSUNG = sAMSUNG;
}

public List<Object> getVIVO() {
return vIVO;
}

public void setVIVO(List<Object> vIVO) {
this.vIVO = vIVO;
}

public List<Object> getNOKIA() {
return nOKIA;
}

public void setNOKIA(List<Object> nOKIA) {
this.nOKIA = nOKIA;
}

public List<IPHONE> getIPHONE() {
return iPHONE;
}

public void setIPHONE(List<IPHONE> iPHONE) {
this.iPHONE = iPHONE;
}

}

Только для брендов class:


package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Brandsonly {

@SerializedName("_id")
@Expose
private String id;
@SerializedName("brandname")
@Expose
private String brandname;

public String getId() {
return id;
}

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

public String getBrandname() {
return brandname;
}

public void setBrandname(String brandname) {
this.brandname = brandname;
}
}

IPHONE class:


package com.example;

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class IPHONE {

@SerializedName("_id")
@Expose
private String id;
@SerializedName("order_id")
@Expose
private String orderId;
@SerializedName("__v")
@Expose
private Integer v;
@SerializedName("adminconfirmation")
@Expose
private Integer adminconfirmation;
@SerializedName("finalpricetodeduct")
@Expose
private Integer finalpricetodeduct;

public String getId() {
return id;
}

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

public String getOrderId() {
return orderId;
}

public void setOrderId(String orderId) {
this.orderId = orderId;
}

public Integer getV() {
return v;
}

public void setV(Integer v) {
this.v = v;
}

public Integer getAdminconfirmation() {
return adminconfirmation;
}

public void setAdminconfirmation(Integer adminconfirmation) {
this.adminconfirmation = adminconfirmation;
}

public Integer getFinalpricetodeduct() {
return finalpricetodeduct;
}

public void setFinalpricetodeduct(Integer finalpricetodeduct) {
this.finalpricetodeduct = finalpricetodeduct;
}
}

MyPojo class:



package com.example;

import java.util.List;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class MyPojo {

@SerializedName("status")
@Expose
private String status;
@SerializedName("brandsonly")
@Expose
private List<Brandsonly> brandsonly = null;
@SerializedName("allorders")
@Expose
private Allorders allorders;

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public List<Brandsonly> getBrandsonly() {
return brandsonly;
}

public void setBrandsonly(List<Brandsonly> brandsonly) {
this.brandsonly = brandsonly;
}

public Allorders getAllorders() {
return allorders;
}

public void setAllorders(Allorders allorders) {
this.allorders = allorders;
}

}

В следующий раз вы сможете использовать это удобное средство сайт .

0 голосов
/ 10 июля 2020

Я не думаю, что схема POJO будет работать в этом случае, поскольку она всегда будет меняться. Было бы намного лучше, если бы allorders был таким же, как brandsonly a JSON Массив JSON Массив

Однако, если это нельзя изменить, посмотрите на ниже.

    final AllOrdersResponse allOrdersResponse = new AllOrdersResponse(userID);
    Call<AllOrdersResponse> responseCall = retrofit_interface.allOrderResponse(allOrdersResponse, "Bearer " + AuthToken);

    responseCall.enqueue(new Callback<AllOrdersResponse>() {
        @Override
        public void onResponse(@NotNull Call<AllOrdersResponse> call, @NotNull Response<AllOrdersResponse> response) {
            AllOrdersResponse response1 = response.body();
            List<String> brands = new ArrayList<>();
            List<Map<String, Product>> products = new ArrayList<>();
            JSONObject jsonObject = new JSONObject(response1); 
            for(JSONObject brand : jsonObject.get("brandsonly")){
                 brands.add(brand.getvalue("brandname"));
            }

             if(brands.size= > 0){
                for(String brandname: brands){
                    HashMap<String, Product> tempHash = new HashMap<>();
                    JSONArray temp = jsonObject.getJSONArray(brandname);
                    foreach(JSONObject x : temp){
                           Product product = new Product();
                           product.FromJSONObject(x);
                           temp.put(brandname, product);
                    }
                    products.add(tempHash);
              }
           }
        }

        @Override
        public void onFailure(@NotNull Call<AllOrdersResponse> call, @NotNull Throwable t) {
            if (t instanceof SocketTimeoutException)
                Toast.makeText(context, "Socket Time out. Please try again.", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(context, t.toString(), Toast.LENGTH_LONG).show();
        }
    });

Итак, у вас есть список BandNames со значением каждого продукта.

Я бы также рекомендовал посмотреть jsonschema2.pojo

...