2016-08-01 4 views
0

こんにちは、私はアンドロイドを学び、現在、私の残りのPOSTとGET要求に1.9を実装すると、誰かが与えられたjsonオブジェクトと文字列をモデル化する方法を教えてくれますか?イム非常に混乱し、私は、このJSONオブジェクトオブジェクトAndroid Retrofit POJOモデル

ため

{ 
"contacts": [ 
    { 
      "id": "c200", 
      "name": "Ravi Tamada", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    }, 
    { 
      "id": "c201", 
      "name": "Johnny Depp", 
      "email": "[email protected]", 
      "address": "xx-xx-xxxx,x - street, x - country", 
      "gender" : "male", 
      "phone": { 
       "mobile": "+91 0000000000", 
       "home": "00 000000", 
       "office": "00 000000" 
      } 
    } 
    }}]} 

このモデルを使用

Contacts.class

public class Contacts { 
@SerializedName("contacts") 
@Expose 
private List<Contact> contacts = new ArrayList<Contact>(); 

public List<Contact> getContacts() { 
    return contacts; 
} 

public void setContacts(List<Contact> contacts) { 
    this.contacts = contacts; 
} 

とContact.classのためのPOJOを作る方法を学びましたいくつかのチュートリアルで

public class Contact { 

@SerializedName("id") 
@Expose 
private String id; 
@SerializedName("name") 
@Expose 
private String name; 
@SerializedName("email") 
@Expose 
private String email; 
@SerializedName("address") 
@Expose 
private String address; 
@SerializedName("gender") 
@Expose 
private String gender; 

public String getId() {return id;} 
public void setId(String id) {this.id = id;} 
public String getName() {return name;} 
public void setName(String name) {this.name = name;} 
public String getEmail() {return email;} 
public void setEmail(String email) {this.email = email;} 
public String getAddress() {return address;} 
public void setAddress(String address) {this.address = address;} 
public String getGender() {return gender;} 
public void setGender(String gender) {this.gender = gender;}} 

MainActivity.classでこれを使用してリストを呼び出す

private void getContacts() { 
    final ProgressDialog loading = ProgressDialog.show(this, "Fetching Data", "Please wait...", false, false); 

    RestAdapter adapter = new RestAdapter.Builder().setEndpoint(ROOT_URL).build(); 
    ContactsAPI api = adapter.create(ContactsAPI.class); 
    api.getContacts(new Callback<Contacts>() { 
     @Override 
     public void success(Contacts contacts, Response response) { 
      loading.dismiss(); 
      List<Contact> contactList = contacts.getContacts(); 
      String[] items = new String[contactList.size()]; 

      for (int i = 0; i < contactList.size(); i++) { 

       items[i] = contactList.get(i).getName(); 
      } 
      ArrayAdapter adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.simple_list,R.id.textview, items); 
      //Setting adapter to listviesw 
      listView.setAdapter(adapter); 
     } 
     @Override 
     public void failure(RetrofitError error) { 
     } 
    }); 
} 

THEN私の質問は、この配列オブジェクトからモデルを作成する方法ですか?

{ 
"-KNea90tV5nZlkeqxc3Q": { 
    "accountName": "Mark Papyrus", 
    "accountNumber": "12435656443", 
    "accountType": "Peso Savings" 
}, 
"-KNeaPmBoTXV4mQC6cia": { 
    "accountName": "Mark Dremeur", 
    "accountNumber": "12435656444", 
    "accountType": "Peso Checking" 
} 

私はモデルや与えられたJSONアレイPLSの違いは私に感謝を導くようにする方法、それは混乱しました。

+2

はここprotipだ - 例えばhttp://www.jsonschema2pojo.org/使用してそれを生成します。 – Shark

+0

@シャーク - 実際にはそれを実行しましたが、私の問題はjsonキーです。この "-KNea90tV5nZlkeqxc3Q"のようにランダムに生成されますので、定数を – user3262438

+1

にすることはできません。私はそれが悪いと言っているのは、モデルクラスがすべてのランダムな値を含み、あなたがチェックするものを知らずにそれらのうちの1つだけに値を割り当てることになるからです...バックエンドチームと話をして、 。 – Shark

答えて

0

私はあなたと同じ問題を抱えていますが、私はあなたができる限りあなたを助けることができるように私は立ち往生していると思います。まず、jsonschema2pojo.orgを使用して、私が理解しているところからhashmapを使用する必要があるpojoクラスを作成することはできません。「-KNea90tV5nZlkeqxc3Q」:がキーですが、クラスの1つは以下のものでなければなりません列挙型を使用しますが、キー「KNea90tV5nZlkeqxc3Qは」ダイナミックであれば、それは

public class Account { 




private String accountName; 

private String accountNumber; 

private String accountType; 


public Account() { 
        } 




public String getAccountName() {return accountName;} 
public void setAccountName(String accountName) { 
this.accountName=accountName;} 

// *** repeat for the accountnumber and accountype 

} 
0

)コードに少し難しくなり、それらをキャプチャする必要がある、あなたはmustoそれらを正しくキャッチするモデルでハッシュマップを使用します。この問題は、それが役に立つかもしれません

チェック:

Parse Dynamic Key Json String using Retrofit

関連する問題