Android:Realm + Retrofit - 序列化apiresponse

时间:2015-01-19 21:44:27

标签: android gson retrofit realm

前言:我正在使用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响应(处理数组和单个对象的情况)序列化以将它们放入我的领域?

1 个答案:

答案 0 :(得分:16)

来自境界的克里斯蒂安。 如果您有一个可以返回列表和单个对象的REST API调用,则必须手动执行某些操作。正如colriot指出的那样,你必须编写自己的GSON解串器。关于如何写一个想法,请在这篇SO帖子中看到一个非常好的答案: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) {

    }
};