Realm和Retrofit,如何在UI线程之外保存?

时间:2015-05-28 10:27:21

标签: android background-process retrofit realm

我使用Retrofit下载jsonClient,然后我必须使用RealmClient extends {来保留它们{1}})。问题是我有15k RealmObject s,因此保存需要几秒钟。如果我无法在线程之间传递Client,如何将我从Retrofit获得的客户列表传递给background thread

当我执行保存时,这是我现在的代码,它会阻止用户界面几秒钟

RealmObject

1 个答案:

答案 0 :(得分:1)

我个人会试着让我的服务和持久层分离。将网络响应解析为实现为简单POJO的Client类,并仅在处理数据库时使用RealmObjects(您需要在两个'客户端实体之间使用某种映射实用程序)。

如果您真的想将Retrofit响应用作RealmObjects,那么您可能需要放弃“回调”#39;在您的API接口中格式化并实现您自己的线程解决方案,因此Retrofit和Realm操作都在同一个线程中执行。

基本上,将其设置为可以执行以下操作:

try {
    List<Client> clients = api.clients(token, date);
    saveClients(clients);
} catch(RetrofitError e){
    Response response = e.getResponse();
    if (response.getStatus() == 401) {
        // Wrong token, refresh it and retry
        refreshLoginToken();
    } else {
        // Propagate error on the UI thread or whatever :P
    }
}

在后台线程中。