2017-02-21 27 views
2

嗨,大家好,我已经遇到了一个问题,而我试图访问一个API服务,它都工作正常。但我的问题在于处理响应。RETROFIT 2.0 unbale来访问API响应数据包含任何列表

我使用改装2.0

下面是我为我的API

{ 
    "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) { } 
    }); 
} 

JSON响应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; 
    } 
} 
+0

会发生什么情况?有什么问题? – azizbekian

+0

@azizbekian我不能写这行'ist apiAllWorksNodeData = response.body()。getData()。getWorksNode();'如果写入它会产生错误 –

+0

编辑错误的日志猫 –

回答

1

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

请上面的json结构。 –

+0

“数据”中的每个节点:将包含多个节点 –

+0

@PranavMS umm。我认为你不正确的JSON结构为什么数据(Datum)是List? –

-1

更换所有WorkTaskConfigJsonElement,如果你正面临着一些问题。 并用GSON等手动解析..

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

+0

这不起作用它会产生更多的错误。 –

+0

你得到了什么错误..?或者,也许你需要确认你的响应,当你打电话给你的响应是相同的响应类 –

+0

所有的文件受到影响..我的'response.body()。getData();'是列表数组,即它是多维array .. –