Проблемы с организацией сложного ответа json с помощью Realm

#android #json #gson #realm

#Android #json #gson #realm

Вопрос:

Я пытаюсь использовать realm в своем приложении для Android. Я попытался найти несколько простых примеров о realm. Я смог настроить проект с помощью realm и теперь хочу начать его реализацию, но столкнулся с проблемами при генерации, классифицированными в соответствии с моим ответом json.

ниже приведен пример json, который я буду использовать

 {
    "Status":true,
    "Message":"Success",
    "ds":{
          "Table1":[{
                     "CustomerId":"1",
                     "CustomerName":"TestUser",
                     "CustomerNo":"100001",
                     "CustomerUrl":"http://abc-001-site10.itempurl.com",
                     "IsActive":true}]}}
  

Мне нужно сгенерировать класс POJO для этого с помощью RealmObject, как я могу его сгенерировать, поскольку я полностью в тупике.

Я также буду использовать GSON вместе с этим.

Нужны некоторые рекомендации.

Комментарии:

1. Объект Realm должен быть объектом содержимого Table1

2. Для Realm / GSON взгляните на realm.io/docs/java/latest/#gson

Ответ №1:

Для этой работы есть отличный инструмент — перейдите к http://www.jsonschema2pojo.org / и проверьте это сами.

Вот ваш JSON, преобразованный в классы POJO с геттерами и сеттерами для использования с GSON:

 -----------------------------------com.example.Ds.java-----------------------------------

package com.example;

import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Ds {

@SerializedName("Table1")
@Expose
private List<Table1> table1 = new ArrayList<Table1>();

/**
* 
* @return
* The table1
*/
public List<Table1> getTable1() {
return table1;
}

/**
* 
* @param table1
* The Table1
*/
public void setTable1(List<Table1> table1) {
this.table1 = table1;
}

}
-----------------------------------com.example.Response.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Response {

@SerializedName("Status")
@Expose
private Boolean status;
@SerializedName("Message")
@Expose
private String message;
@SerializedName("ds")
@Expose
private Ds ds;

/**
* 
* @return
* The status
*/
public Boolean getStatus() {
return status;
}

/**
* 
* @param status
* The Status
*/
public void setStatus(Boolean status) {
this.status = status;
}

/**
* 
* @return
* The message
*/
public String getMessage() {
return message;
}

/**
* 
* @param message
* The Message
*/
public void setMessage(String message) {
this.message = message;
}

/**
* 
* @return
* The ds
*/
public Ds getDs() {
return ds;
}

/**
* 
* @param ds
* The ds
*/
public void setDs(Ds ds) {
this.ds = ds;
}

}
-----------------------------------com.example.Table1.java-----------------------------------

package com.example;

import javax.annotation.Generated;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

@Generated("org.jsonschema2pojo")
public class Table1 {

@SerializedName("CustomerId")
@Expose
private String customerId;
@SerializedName("CustomerName")
@Expose
private String customerName;
@SerializedName("CustomerNo")
@Expose
private String customerNo;
@SerializedName("CustomerUrl")
@Expose
private String customerUrl;
@SerializedName("IsActive")
@Expose
private Boolean isActive;

/**
* 
* @return
* The customerId
*/
public String getCustomerId() {
return customerId;
}

/**
* 
* @param customerId
* The CustomerId
*/
public void setCustomerId(String customerId) {
this.customerId = customerId;
}

/**
* 
* @return
* The customerName
*/
public String getCustomerName() {
return customerName;
}

/**
* 
* @param customerName
* The CustomerName
*/
public void setCustomerName(String customerName) {
this.customerName = customerName;
}

/**
* 
* @return
* The customerNo
*/
public String getCustomerNo() {
return customerNo;
}

/**
* 
* @param customerNo
* The CustomerNo
*/
public void setCustomerNo(String customerNo) {
this.customerNo = customerNo;
}

/**
* 
* @return
* The customerUrl
*/
public String getCustomerUrl() {
return customerUrl;
}

/**
* 
* @param customerUrl
* The CustomerUrl
*/
public void setCustomerUrl(String customerUrl) {
this.customerUrl = customerUrl;
}

/**
* 
* @return
* The isActive
*/
public Boolean getIsActive() {
return isActive;
}

/**
* 
* @param isActive
* The IsActive
*/
public void setIsActive(Boolean isActive) {
this.isActive = isActive;
}

}
  

Чтобы использовать это с Realm, вам нужно extends RealmObject указать классы, которые вы собираетесь сохранить в Realm, и добавить @PrimaryKey аннотацию к одному из полей в каждом классе, которые являются уникальными. Например customerId , может быть кандидатом в классе Table1. И если какой-либо из классов, extends RealmObject содержащих a List<Foo> , вы должны поменять его RealmList<Foo> местами, и Foo extends RealmObject также должны. И если вы используете RealmList, вы должны добавить TypeAdapter в GSON, чтобы он знал, как с ним обращаться — вот тот, который я написал, который принимает общий T.