在改造中创建动态对象请求

Jaw*_*Zeb 5 android web-services retrofit

如何为改装请求创建动态对象。例如示例请求1:

 "answer" :     {
        "Aggravating factor" :         {
            "value_dropdown" : "None"
        },
        "Associated factors" :         {
            "value" : "1"
        }
}
Run Code Online (Sandbox Code Playgroud)

示例请求2:

 "answer" :     {
            "Intensity :         {
                "value_dropdown" : "Major"
            },
            "Duration" :         {
                "value" : "5"
            }
    }
Run Code Online (Sandbox Code Playgroud)

因此,每次请求模型发生变化时,我都会从最终用户填写的答复表单中收集所有这些参数名和值,然后如何使用它来创建具有动态值的请求模型,即“ answer”:{{” parameter名称”:“值”}}。

我的努力:带有序列化输出的静态模型:

public class SampleModel {


    @SerializedName("answer")
    public ArrayList<QuestionAnswers> answer;

    public SampleModel() {
        answer = new ArrayList<>();
    }


    public static class QuestionAnswers {
        public String question_title;
        public List<KeyValuePaire> questions;

        public QuestionAnswers() {
            questions = new ArrayList<>();
        }
    }

    public static class KeyValuePaire {
        public String _type;
        public String _value;
    }

}
Run Code Online (Sandbox Code Playgroud)

此模型请求在日志下方打印:

{
  "answer": [
    {
      "question_title": "Aggravating factor",
      "questions": [
        {
          "_type": "value_dropdown",
          "_value": "None"
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

Jaw*_*Zeb 3

使用 TreeMap 解决了这个问题,其中 TreeMap 的键被视为参数名称,值被视为值。

public class RequestSelectedAnswers {

    @SerializedName("answer")
    TreeMap answers;

    public RequestSelectedAnswers() {
        answers = new TreeMap();
    }

    public TreeMap getAnswers() {
        return answers;
    }

    public void setAnswers(TreeMap answers) {
        this.answers = answers;
    }

}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

RequestSelectedAnswers request = new RequestSelectedAnswers();       
request.getAnswers().put("Intensity", someArrayOrAnotherMap);
Run Code Online (Sandbox Code Playgroud)