2017-02-21 10 views
2

Привет, ребята, я ударил одной проблемой, пока я пытаюсь получить доступ к одним из услуг api, все работает нормально. Но моя проблема в обработке ответа.RETROFIT 2.0 unbale to acess данные ответа api содержат любой список

Я использую переоснащение 2.0

Ниже мой 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; 
    } 
} 
+0

Что происходит? В чем проблема? – azizbekian

+0

@azizbekian Я не могу написать эту строку 'ist apiAllWorksNodeData = response.body(). GetData(). GetWorksNode();' if write it производит ошибку –

+0

Редактировать с помощью log cat ошибки –

ответ

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

Заменить все WorkTaskConfig к JsonElement, если вы столкнулись с какой-то проблемой. и Разобрать вручную с Gson как ..

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

+0

Это не работает, он вызывает больше ошибок. –

+0

какая ошибка у .... Или, может быть, вам нужно подтвердить свой ответ, который приходит, когда вы вызываете api, такой же, как ваш класс ответа –

+0

, все файлы были затронуты .. my 'response.body(). GetData();' - массив массивов, то есть он многомерный array .. –