2016-08-01 56 views
0

嗨,我想学习Android,现在实施改造1.9我的休息POST和GET请求可以有人帮助我如何模型给定的JSON对象和字符串?即时通讯很困惑的一些教程,我已经学会了如何做一个POJO此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为对象

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

我的问题是我应该如何使这个数组对象的模型?

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

我发现它混淆了如何使模型和给定的json数组的区别pls指导我的感谢。

+2

这里有一个普罗蒂普 - 它使用http://www.jsonschema2pojo.org/例如产生。 – Shark

+0

@ Shark-实际上做到了,但我的问题是JSON像这样的键“-KNea90tV5nZlkeqxc3Q”是随机生成的,所以我不能让它保持不变 – user3262438

+1

这将使JSON成为一个糟糕的选择,除非随机生成的salt部分成为成员。我说这很糟糕,因为模型类最终将包含所有随机值并将值分配给其中的一个,而您不知道要检查哪一个值......它需要与后端团队进行交谈,以向您提供进一步的指示。 – Shark

回答

0

我想我和你有同样的问题,但我卡住了,所以我可以尽我所能帮助你。首先,你不能使用jsonschema2pojo.org来创建你需要使用hashmap的pojo类,据我所知“-KNea90tV5nZlkeqxc3Q”:是一个关键,但其中1个类应该是以下(也是因为它的类型你可以用枚举,但它会有点难以代码)

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

如果键“KNea90tV5nZlkeqxc3Q”是动态的,需要捕捉它们,你要穆斯托使用一个HashMap在你的模型正确地抓住他们。

检查这个问题,它可能是有用的:

Parse Dynamic Key Json String using Retrofit