Android: Realm + Retrofit - 序列化 apiresponse
Android: Realm + Retrofit - Serialize apiresponse
前言:我正在使用 Retrofit 来处理我的 API 调用,并使用 Realm(realm.io) 来存储数据。
我处理的API使用以下结构:
数组响应
{
"response":
[
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
},
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
]
}
单一对象响应
{
"response":
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
}
所有 api 响应都包含在数组(如果结果大小 > 1)或对象(如果结果大小 == 1)中的响应对象中。
我目前的 API 电话如下:
@GET("/api/myEndpoint")
void getAllExampleObjects(Callback<MyRealmClass> callback);
如何序列化 API 响应(处理数组和单个对象的情况)以将它们放入我的领域?
这里是 Realm 的基督徒。
如果您有一个 REST API 调用可以 return 一个列表和一个对象,您将不得不手动执行一些操作。正如 colriot 指出的那样,您将不得不编写自己的 GSON 解串器。有关如何编写的想法,请参阅此 SO post 中的一个很好的答案:How to handle parameters that can be an ARRAY or OBJECT in Retrofit on Android?
要将对象放入 Realm,您可以按以下方式使用 realm.copyToRealm(objects)
:
@GET("/api/myEndpoint")
void getAllExampleObjects(Callback<List<MyRealmClass>> callback);
Callback callback = new Callback() {
@Override
public void success(List<MyRealmClass> objects, Response response) {
realm.beginTransaction();
realm.copyToRealm(objects);
realm.commitTransaction();
}
@Override
public void failure(RetrofitError retrofitError) {
}
};
前言:我正在使用 Retrofit 来处理我的 API 调用,并使用 Realm(realm.io) 来存储数据。
我处理的API使用以下结构:
数组响应
{
"response":
[
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
},
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
]
}
单一对象响应
{
"response":
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
}
所有 api 响应都包含在数组(如果结果大小 > 1)或对象(如果结果大小 == 1)中的响应对象中。
我目前的 API 电话如下:
@GET("/api/myEndpoint")
void getAllExampleObjects(Callback<MyRealmClass> callback);
如何序列化 API 响应(处理数组和单个对象的情况)以将它们放入我的领域?
这里是 Realm 的基督徒。 如果您有一个 REST API 调用可以 return 一个列表和一个对象,您将不得不手动执行一些操作。正如 colriot 指出的那样,您将不得不编写自己的 GSON 解串器。有关如何编写的想法,请参阅此 SO post 中的一个很好的答案:How to handle parameters that can be an ARRAY or OBJECT in Retrofit on Android?
要将对象放入 Realm,您可以按以下方式使用 realm.copyToRealm(objects)
:
@GET("/api/myEndpoint")
void getAllExampleObjects(Callback<List<MyRealmClass>> callback);
Callback callback = new Callback() {
@Override
public void success(List<MyRealmClass> objects, Response response) {
realm.beginTransaction();
realm.copyToRealm(objects);
realm.commitTransaction();
}
@Override
public void failure(RetrofitError retrofitError) {
}
};