Naz*_*Naz 4 android realm gson retrofit
前言:我正在使用Retrofit处理我的API调用和Realm(realm.io)来存储数据.
API im处理使用以下结构:
阵列响应
{
"response":
[
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
},
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
]
}
Run Code Online (Sandbox Code Playgroud)
单个对象响应
{
"response":
{
"objectField1":"abc"
"objectField2":"abc"
"objectField3":"abc"
"objectField4":"abc"
}
}
Run Code Online (Sandbox Code Playgroud)
所有api响应都包含在数组(如果结果大小> 1)或对象(如果结果大小== 1)的响应对象中.
我目前的API调用如下:
@GET("/api/myEndpoint")
void getAllExampleObjects(Callback<MyRealmClass> callback);
Run Code Online (Sandbox Code Playgroud)
如何将API响应(处理数组和单个对象的情况)序列化以将它们放入我的领域?
Chr*_*ior 16
Christian from Realm here. If you have a single REST API call that can return both a list and a single object, you will have to do something manually. As colriot points out you will have to write your own GSON deserializer. For ideas how to write one see a very good answer in this SO post: How to handle parameters that can be an ARRAY or OBJECT in Retrofit on Android?
To get the objects into Realm you can use realm.copyToRealm(objects) in the following way:
@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) {
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5900 次 |
| 最近记录: |