繁体   English   中英

Retrofit2:在数组中显示 Json 对象

[英]Retrofit2: Display Json Object in an Array

我正在尝试显示以下 JSON 的信息。

{
"resourceType": "Patient",
"text": {
  "status": "generated",
  "div": "<div>\n      \n      <table>\n        \n        <tbody>\n          \n          <tr>\n            \n            <td>Name</td>\n            \n            <td>Peter James \n              <b>Chalmers</b> (&quot;Jim&quot;)\n            </td>\n          \n          </tr>\n          \n          <tr>\n            \n            <td>Address</td>\n            \n            <td>534 Erewhon, Pleasantville, Vic, 3999</td>\n          \n          </tr>\n          \n          <tr>\n            \n            <td>Contacts</td>\n            \n            <td>Home: unknown. Work: (03) 5555 6473</td>\n          \n          </tr>\n          \n          <tr>\n            \n            <td>Id</td>\n            \n            <td>MRN: 12345 (Acme Healthcare)</td>\n          \n          </tr>\n        \n        </tbody>\n      \n      </table>    \n    \n    </div>"
},
"identifier": [
  {
    "fhir_comments": [
      "   MRN assigned by ACME healthcare on 6-May 2001   "
    ],
    "use": "usual",
    "type": {
      "coding": [
        {
          "system": "http://hl7.org/fhir/v2/0203",
          "code": "MR"
        }
      ]
    },
    "system": "urn:oid:1.2.36.146.595.217.0.1",
    "value": "12345",
    "period": {
      "start": "2001-05-06"
    },
    "assigner": {
      "display": "Acme Healthcare"
    }
  }
],
"active": true,
"name": [
  {
    "fhir_comments": [
      "   Peter James Chalmers, but called \"Jim\"   "
    ],
    "use": "official",
    "family": [
      "Chalmers"
    ],
    "given": [
      "Peter",
      "James"
    ]
  },
  {
    "use": "usual",
    "given": [
      "Jim"
    ]
  }
],
"telecom": [
  {
    "fhir_comments": [
      "   home communication details aren't known   "
    ],
    "use": "home"
  },
  {
    "system": "phone",
    "value": "(03) 5555 6473",
    "use": "work"
  }
],
"gender": "male",
"_genderInfo": {
  "fhir_comments": [
    "   use FHIR code system for male / female   "
  ]
},
"birthDate": "1974-12-25",
"_birthDateInfo": {
  "extension": [
    {
      "url": "http://hl7.org/fhir/StructureDefinition/patient-birthTime",
      "valueDateTime": "1974-12-25T14:35:45-05:00"
    }
  ]
},
"deceasedBoolean": false,
"address": [
  {
    "use": "home",
    "type": "both",
    "line": [
      "534 Erewhon St"
    ],
    "city": "PleasantVille",
    "district": "Rainbow",
    "state": "Vic",
    "postalCode": "3999",
    "period": {
      "start": "1974-12-25"
    }
  }
],
"contact": [
  {
    "relationship": [
      {
        "coding": [
          {
            "system": "http://hl7.org/fhir/patient-contact-relationship",
            "code": "partner"
          }
        ]
      }
    ],
    "name": {
      "family": [
        "du",
        "Marché"
      ],
      "_familyInfo": [
       {
          "extension": [
            {
              "fhir_comments": [
                "   the \"du\" part is a family name prefix (VV in iso 21090)   "
              ],
              "url": "http://hl7.org/fhir/StructureDefinition/iso21090-EN-qualifier",
              "valueCode": "VV"
            }
          ]
        },
        null
      ],
      "given": [
        "Bénédicte"
      ]
    },
    "telecom": [
      {
        "system": "phone",
        "value": "+33 (237) 998327"
      }
    ],
    "gender": "female",
    "period": {
      "start": "2012",
      "_startInfo": {
        "fhir_comments": [
          "   The contact relationship started in 2012   "
        ]
      }
    }
  }
]
}

我的 @GET 课程

public interface RetrofitObjectAPI {
  @GET("Patient/4765?_format=json")
  Call<Patient> getPatientDetails();
}

我用http://www.jsonschema2pojo.org/创建了 MOJO(Getter 和 Setter 被缩短只是为了显示重要的)

public class Patient {

private String resourceType;
private int id;
private Text text;
private List<Identifier> identifier = null;
private boolean active;
private List<Name> name = null;
private List<Telecom> telecom = null;
private String gender;
private GenderInfo genderInfo;
private String birthDate;
private BirthDateInfo birthDateInfo;
private boolean deceasedBoolean;
private List<Address> address = null;
private List<Contact> contact = null;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

public List<Name> getName() {
    return name;
}

public void setName(List<Name> name) {
    this.name = name;
}

Name 类看起来像这样

public class Name {

private List<String> fhirComments = null;
private String use;
private List<String> family = null;
private List<String> given = null;
private Map<String, Object> additionalProperties = new HashMap<String, Object>();

  public List<String> getFhirComments() {
      return fhirComments;
  }

  public void setFhirComments(List<String> fhirComments) {
      this.fhirComments = fhirComments;
  }

  public String getUse() {
      return use;
  }

  public void setUse(String use) {
      this.use = use;
  }

  public List<String> getFamily() {
      return family;
  }

  public void setFamily(List<String> family) {
      this.family = family;
  }

  public List<String> getGiven() {
      return given;
  }

  public void setGiven(List<String> given) {
      this.given = given;
  }

  public Map<String, Object> getAdditionalProperties() {
      return this.additionalProperties;
  }

  public void setAdditionalProperty(String name, Object value) {
      this.additionalProperties.put(name, value);
  }

}

我可以在没有这样的数组的情况下获取信息:

 public void getRetrofitObject() {

    Gson gson = new GsonBuilder()
            .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
            .create();

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create(gson))
            .build();

    RetrofitObjectAPI service = retrofit.create(RetrofitObjectAPI.class);

    Call<Patient> callPatient = service.getPatientDetails();
    callPatient.enqueue(new Callback<Patient>() {
        @Override
        public void onResponse(Call<Patient> call, Response<Patient> response) {

            text_id_1.setText("Resource Type: " + response.body().getResourceType());
            text_id_2.setText("ID: " + response.body().getId());
            text_id_3.setText("Text: " + response.body().getText().getStatus());
        }

        @Override
        public void onFailure(Call<Patient> call, Throwable t) {
            Log.d("x", "x");
        }
    });

}

这段代码直到现在都按照它应该的方式工作。 但我不知道如何显示它们的数组项。 例如,我想在“名称”中显示提交的“使用”或“给定”。 我怎样才能访问它们?

尝试将其添加到您的onResponse调用中。

Patient patient = response.body();

List<Name> names = patient.getName();

for (Name name : names) {
    System.out.println(name.getGiven());
    System.out.println(name.getFamily());
    System.out.println(name.getUse());
}

您拥有Patient对象中的所有信息,您只需要使用您拥有的 getter 和 setter 来查找它。

暂无
暂无

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

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