#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.