繁体   English   中英

RETROFIT 2.0 unbale to acess api响应数据包含任何列表

[英]RETROFIT 2.0 unbale to acess api response data contains any list

嗨,大家好我遇到了一个问题,而我正在尝试访问一个api服务,它一切正常。 但我的问题在于处理响应。

我正在使用改造2.0

以下是我对我的api的json回复

    {
  "status": 200,
  "success": "true",
  "data": [
    {
      "works_node": [
        {
          "works_items": [
            {
              "work_id": "number",

              "preference": "number",
              "Task_created_time": "datetime yyyy-mm-dd h:m:s"
            }
          ]
        }
      ],
      "questions_node": [
        {
          "questions_items": [
            {
              "q_id": "number",
              "work_id": "number",
              "question_text": "string",
              "preference": "number" 
            }
          ]
        }
      ],
      "answers_node": [
        {
          "answers_items": [
            {
              "a_id": "number",
              "q_id": "number",
              "answer_text": "string",
              "prefernce": "number",
              "point": "number",
              "is_suggest": "number",
              "work_id": "number"
            }
          ]
        }
      ],
      "answer_suggestions_node": [
        {
          "answer_suggestions_items": [
            {
              "a_id": "number",
              "q_id": "number",
              "answer_suggestion_text": "string",
              "point": "number",
              "work_id": "number"
            }
          ]
        }
      ]
    }
  ]
}

下面是api调用代码

public  void getWorkTaskConfig(){
    ApiInterface apiService =  ApiClient.getClient().create(ApiInterface.class);
    String DeviceImei=uf.getIMEI();
    int userId=db.getUserId();

    Call<WorkTaskConfig> call = apiService.getWorkTaskConfig
            (new BasicData(new UserInfo(userId),new DeviceInfo(DeviceImei)));
    call.enqueue(new Callback<WorkTaskConfig>() {
        @Override
        public void onResponse(Call<WorkTaskConfig> call, Response<WorkTaskConfig> response) {
            try {
                int apiStatus= response.body().getStatus();
                Boolean apiSuccess=response.body().getSuccess();
                if (apiStatus == Constants.RESULT_CODE_OK &&
                        apiSuccess.equals(Constants.RESULT_SUCCESS_OK)) {     //data received successfully
                    List<Datum> apiAllWorkTaskConfigData=response.body().getData();
                    List<WorksNode> apiAllWorksNodeData=response.body().getData().getWorksNode();    // im facing 
                    //the problem here ie i am not able to access the getWorksNode() function 
                    //in Datum.java class. 
                }else{                  //while retrieving data something went wrong.  
                }
            } catch (Exception e) { e.printStackTrace(); }
        } 
        @Override
        public void onFailure(Call<WorkTaskConfig> call, Throwable t) {   }
    }); 
}

WorkTaskConfig.java

public class WorkTaskConfig {
    @SerializedName("status")
    @Expose
    private Integer status;

    @SerializedName("success")
    @Expose
    private Boolean success;

    @SerializedName("data")
    @Expose
    private List<Datum> data = null;

    public Integer getStatus() {
        return status;
    }

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

    public Boolean getSuccess() {
        return success;
    }

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

    public List<Datum> getData() {
        return data;
    }

    public void setData(List<Datum> data) {
        this.data = data;
    }
}

Datum.java

public class Datum {

    @SerializedName("works_node")
    @Expose
    private List<WorksNode> worksNode = null;

    public List<WorksNode> getWorksNode() {
        return worksNode;
    }

    public void setWorksNode(List<WorksNode> worksNode) {
        this.worksNode = worksNode;
    }
}

  1. 编辑Json structure
  2. 编辑POJO类( Datum

编辑Json结构

data是一个对象,而不是数组。

{
    "status": 200,
    "success": "true",
    "data": {
        "works_node": [{
            "works_items": [{
                "work_id": "number",
                "preference": "number",
                "Task_created_time": "datetime yyyy-mm-dd h:m:s"
            }]
        }],
        "questions_node": [{
            "questions_items": [{
                "q_id": "number",
                "work_id": "number",
                "question_text": "string",
                "preference": "number"
            }]
        }],
        "answers_node": [{
            "answers_items": [{
                "a_id": "number",
                "q_id": "number",
                "answer_text": "string",
                "prefernce": "number",
                "point": "number",
                "is_suggest": "number",
                "work_id": "number"
            }]
        }],
        "answer_suggestions_node": [{
            "answer_suggestions_items": [{
                "a_id": "number",
                "q_id": "number",
                "answer_suggestion_text": "string",
                "point": "number",
                "work_id": "number"
            }]
        }]
    }
}

编辑POJO课程

转到下面的链接并再次生成pojo class

http://www.jsonschema2pojo.org/

试试这个。

WorkTaskConfig taskConfig = reponse.body();

List<WorksNode> worksNode = taskConfig.getData().getWorksNode();
List<QuestionsNode> questionsNode = taskConfig.getData().getQuestionsNode();
List<AnswersNode> answersNode = taskConfig.getData().getAnswersNode();
List<AnswerSuggestionsNode> answerSuggestionsNode = taskConfig.getData().getAnswerSuggestionsNode();

如果您遇到一些问题,请将所有WorkTaskConfig替换为JsonElement 并用Gson手动解析..

String apiAllWorkTaskConfigData = response.body().getData(); WorkTaskConfig mWorkTaskConfig = new Gson.fromJson(apiAllworkTaskConfigData,WorkTaskConfig.class);

暂无
暂无

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

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