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



真的希望有人能够为我指出正确的方向。我们有一个应用程序,它使用 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();
}

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

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

每次我们去拉取数据时,我们都会先检查请求队列,如果里面有任何东西,就运行,如果它们继续失败,你就不要拉取。

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

最新更新