Как получить массив JSON внутри объекта JSON и выполнить итерацию - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь установить связь с API с помощью Retrofit в Android Stud ios, но не знаю, как получить массив JSON в объекте JSON.

JSON:

{
   "result":{
      "status":{
         "msg":"success",
         "code":200,
         "action":2,
         "execution_time":"0.505"
      },
      "page":"1",
      "page_size":"40",
      "q":"iphone",
      "sort":"default",
      "tmall":false,
      "free_shiping":false,
      "total_results":1924963,
      "ip":"13.228.169.5",
      "item":[
         {
            "num_iid":619354061232,
            "pic":"https://img.alicdn.com/bao/uploaded/i4/2150908574/O1CN01O3Akm82DCwTChbTXg_!!2150908574.jpg",
            "title":"Apple/苹果 iPhone XR iphone xs max手机双卡国行原装4G xr苹果x",
            "price":"6000",
            "promotion_price":"2009",
            "sales":1973,
            "loc":"广东 深圳",
            "seller_id":2150908574,
            "seller_nick":"实惠馆超市",
            "shop_title":"新魔方数码",
            "user_type":0,
            "detail_url":"https://item.taobao.com/item.htm?id=619354061232",
            "delivery_fee":"0.00"
         }
        "item":[...]

Метод:

    private void taobaoSearch(){
        TaobaoInterface retrofitInterface = RetrofitInstance.getRetrofitInstanceTaobao().create(TaobaoInterface.class);
        Call<TaobaoModel> listCall = retrofitInterface.getTaobao("item_search", "40","default", "iphone","taobao-api.p.rapidapi.com", "//apikey hidden");
        listCall.enqueue(new Callback<TaobaoModel>() {
            @Override
            public void onResponse(Call<TaobaoModel> call, Response<TaobaoModel> response) {
                //not sure what to do here

                }

            @Override
            public void onFailure(Call<TaobaoModel> call, Throwable t) {
                System.out.println("FAILED");
                System.out.println(call);
                t.printStackTrace();
            }
        });

    }

TaobaoModel:

public class TaobaoModel {
    @SerializedName("result")
    private Result result;

    public Result getResult() {
        return result;
    }

    public void setResult(Result result) {
        this.result = result;
    }
}

Результат:

public class Result {
    @SerializedName("status")
    private Status status;
    @SerializedName("q")
    private String q;
    @SerializedName("page")
    private String page;
    @SerializedName("page_size")
    private String page_size;
    @SerializedName("total_results")
    private int total_results;
    @SerializedName("tmall")
    private String tmall;
    @SerializedName("sort")
    private String sort;
    @SerializedName("free_shiping")
    private String free_shiping;
    @SerializedName("ip")
    private String ip;
    @SerializedName("item")
    private ArrayList<TaobaoItems> item;

    public Status getStatus() {
        return status;
    }

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

    public String getQ() {
        return q;
    }

    public void setQ(String q) {
        this.q = q;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public String getPage_size() {
        return page_size;
    }

    public void setPage_size(String page_size) {
        this.page_size = page_size;
    }

    public int getTotal_results() {
        return total_results;
    }

    public void setTotal_results(int total_results) {
        this.total_results = total_results;
    }

    public String getTmall() {
        return tmall;
    }

    public void setTmall(String tmall) {
        this.tmall = tmall;
    }

    public String getSort() {
        return sort;
    }

    public void setSort(String sort) {
        this.sort = sort;
    }

    public String getFree_shiping() {
        return free_shiping;
    }

    public void setFree_shiping(String free_shiping) {
        this.free_shiping = free_shiping;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }

    public ArrayList<TaobaoItems> getItem() {
        return item;
    }

    public void setItem(ArrayList<TaobaoItems> item) {
        this.item = item;
    }
}

TaobaoItems

public class TaobaoItems {
    @SerializedName("num_iid")
    private long num_iid;
    @SerializedName("pic")
    private String pic;
    @SerializedName("title")
    private String title;
    @SerializedName("price")
    private String price;
    @SerializedName("promotion_price")
    private String promotion_price;
    @SerializedName("sales")
    private int sales;
    @SerializedName("loc")
    private String loc;
    @SerializedName("seller_id")
    private long seller_id;
    @SerializedName("seller_nick")
    private String seller_nick;
    @SerializedName("shop_title")
    private String shop_title;
    @SerializedName("user_type")
    private int user_type;
    @SerializedName("detail_url")
    private String detail_url;
    @SerializedName("delivery_fee")
    private String delivery_fee;

    public TaobaoItems(String title, String price, String pic,  String detail_url) {
        this.pic = pic;
        this.title = title;
        this.price = price;
        this.detail_url = detail_url;
    }

    public long getNum_iid() {
        return num_iid;
    }

    public void setNum_iid(long num_iid) {
        this.num_iid = num_iid;
    }

    public String getPic() {
        return pic;
    }

    public void setPic(String pic) {
        this.pic = pic;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getPromotion_price() {
        return promotion_price;
    }

    public void setPromotion_price(String promotion_price) {
        this.promotion_price = promotion_price;
    }

    public int getSales() {
        return sales;
    }

    public void setSales(int sales) {
        this.sales = sales;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }

    public long getSeller_id() {
        return seller_id;
    }

    public void setSeller_id(long seller_id) {
        this.seller_id = seller_id;
    }

    public String getSeller_nick() {
        return seller_nick;
    }

    public void setSeller_nick(String seller_nick) {
        this.seller_nick = seller_nick;
    }

    public String getShop_title() {
        return shop_title;
    }

    public void setShop_title(String shop_title) {
        this.shop_title = shop_title;
    }

    public int getUser_type() {
        return user_type;
    }

    public void setUser_type(int user_type) {
        this.user_type = user_type;
    }

    public String getDetail_url() {
        return detail_url;
    }

    public void setDetail_url(String detail_url) {
        this.detail_url = detail_url;
    }

    public String getDelivery_fee() {
        return delivery_fee;
    }

    public void setDelivery_fee(String delivery_fee) {
        this.delivery_fee = delivery_fee;
    }
}

Статус:

public class Status {
    @SerializedName("msg")
    private String msg;
    @SerializedName("code")
    private int code;
    @SerializedName("action")
    private int action;
    @SerializedName("execution_time")
    private String execution_time;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

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

    public int getAction() {
        return action;
    }

    public void setAction(int action) {
        this.action = action;
    }

    public String getExecution_time() {
        return execution_time;
    }

    public void setExecution_time(String execution_time) {
        this.execution_time = execution_time;
    }
}

Я намерен получить JSON массив item и отобразить из него title,price,pic,detail_url. Я узнал, как отображать его по одному, но не смог найти, как выполнить итерацию объекта JSON, чтобы я мог отображать данные в виде списка. Пожалуйста, помогите, я новичок в этом, и я застрял довольно долго. Если вы хотите увидеть мой интерфейс, модифицируйте экземпляр et c, просто дайте мне знать.

1 Ответ

1 голос
/ 10 июля 2020
private void taobaoSearch(){
    TaobaoInterface retrofitInterface = RetrofitInstance.getRetrofitInstanceTaobao().create(TaobaoInterface.class);
    Call<TaobaoModel> listCall = retrofitInterface.getTaobao("item_search", "40","default", "iphone","taobao-api.p.rapidapi.com", "//apikey hidden");
    listCall.enqueue(new Callback<TaobaoModel>() {
        @Override
        public void onResponse(Call<TaobaoModel> call, Response<TaobaoModel> response) {
            List<Result> retro=response.body().getitems();
            generateDataList(retro);

            }

        @Override
        public void onFailure(Call<TaobaoModel> call, Throwable t) {
            System.out.println("FAILED");
            System.out.println(call);
            t.printStackTrace();
        }
    });

}
     /*Method to generate List of data using RecyclerView with custom adapter*/
private void generateDataList(List<Result> dataList) {
    recyclerView = findViewById(R.id.customRecycler);
    adapter = new CustomAdapter(this,dataList);
    recyclerView.setAdapter(adapter);

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);



}
...