使用实时数据保持领域数据最新

时间:2018-05-25 15:20:42

标签: java realm

真的希望有人能够指出我正确的方向。我们有一个应用程序,它使用Realm在设备上本地管理我们的数据。

通过一般使用,将有数据输入到设备,然后将尝试将其发送到我们在api上的实时服务。但是,由于用户的位置,我们无法确定在下次打开应用程序之前重新下载数据之前是否已上传。

我们需要它在某种程度上像Git一样工作。在没有先提交更改的情况下,您无法提取。但是,我们没有承诺,而是在努力推进。

我们认为实时数据应该优先考虑,所以如果现场有变化,它应该被拉下来,但是如果现场有空的但是我们在本地有它,那么我们应该改变它。

我们可以使用哪些代码来编写此功能,无法相信我们是第一个面对此问题的人。在用户开始工作之前我们应该如何获取数据的那个或者流程。

一个例子:

我们希望保存用户输入的imei号码。这将保存到当时的领域数据库并尝试更新实时数据库。如果在重新启动应用程序并且提取了imei号码时无法做到这一点,那么我们就不知道那些可能的内容,直到我们在本地的数据在实时丢失时被推送。

Imei.java(领域模型)

public class Imei extends RealmObject {

    @PrimaryKey
    public int id;

    public int deviceId;

    public String imei;

}

当我们得到关于获取的回复时:

@Override
public void onResponse(JSONObject response) {
    Gson gson = new GsonBuilder()
   .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
   .create();
    ImeiResponse imeiResponse = gson.fromJson(response.toString(), ImeiResponse.class);

    for (Imei imei : imeiResponse.imeis()) {
        addToDB(imei);
    }
}

然后我们使用addToDb,我想这会发生某种检查,就像我们能够拉动那样我们有足够好的连接来推送我们本地的数据

public void addToDB(Imei imei)
    {
        Realm realm = Realm.getDefaultInstance();

        realm.beginTransaction();

        realm.copyToRealmOrUpdate(imei);

        realm.commitTransaction();
    }

1 个答案:

答案 0 :(得分:0)

万一有人偶然发现了这个问题,我们最终找到了解决方案。

每当我们需要保存数据时,我们都会将其添加到请求队列表中,然后尝试运行每个请求。如果他们通过,他们将被删除,如果他们失败,他们将被删除。

每次我们去提取数据时,我们会检查请求是否先排队并在其中有任何内容时运行,如果它们继续失败,则不要拉。

这对我们来说似乎是最好的解决方案。希望它有所帮助