2017-01-19 2 views
-1

Я пытаюсь отобразить информацию о следующем JSON.Retrofit2: Показать объект 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(); 
} 

Я создал MOJO с http://www.jsonschema2pojo.org/ (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; 
} 

Класс имя выглядит например

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

} 

Этот код, пока эта точка не работает так, как предполагается. Но я не мог понять, как отображать элементы массива. Например, я хочу отобразить поданное «использование» или «данное» в «имя». Как я могу получить к ним доступ?

ответ

0

Попробуйте добавить это в свой звонок 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 объекте, нужно просто посмотреть его с добытчиками и сеттеров у вас есть.

Смежные вопросы