【问题标题】:Android Retrofit POJO modelAndroid 改造 POJO 模型
【发布时间】:2016-08-01 08:49:31
【问题描述】:

嗨,我正在尝试学习 android,现在为我的其余 POST 和 GET 请求实施改造 1.9 有人可以帮助我如何对给定的 json 对象和字符串进行建模吗?我对一些教程很困惑,我已经学会了如何为这个 json 对象制作一个 pojo

{
"contacts": [
    {
            "id": "c200",
            "name": "Ravi Tamada",
            "email": "ravi@gmail.com",
            "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": "johnny_depp@gmail.com",
            "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 数组的差异令人困惑,请指导我,谢谢。

【问题讨论】:

  • 这是一个提示 - 例如使用 jsonschema2pojo.org 生成它。
  • @Shark- 实际上做到了,但我的问题是像这样“-KNea90tV5nZlkeqxc3Q”这样的 json 键是随机生成的,所以我不能让它保持不变
  • 这将使 JSON 成为一个糟糕的选择,除非随机生成的 salt 部分成为成员。我说这很糟糕,因为模型类最终将包含所有随机值并仅将值分配给其中一个,而您却不知道要检查哪一个……这需要与后端团队进行交谈以向您提供进一步的说明.
  • @Shark - 遗憾的是我不能这样做,因为我需要动态处理
  • 哎哟......祝你好运。

标签: java android json model retrofit


【解决方案1】:

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

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

 }

【讨论】:

    【解决方案2】:

    如果键“KNea90tV5nZlkeqxc3Q”是动态的并且需要捕获它们,您必须在模型中使用哈希图来正确捕获它们。

    检查这个问题可能有用:

    Parse Dynamic Key Json String using Retrofit

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2013-11-18
      • 2018-08-11
      • 1970-01-01
      • 2019-12-16
      • 2015-09-10
      • 1970-01-01
      • 2015-12-24
      • 2018-03-07
      相关资源
      最近更新 更多