android - 在同步到服务器之前要在本地 android 数据库上设置什么主键?

标签 android database sync realm

我正在制作一个具有数据库模型的应用程序:

Item (int id, String name, String description, Date updatedDate, boolean isSynced)

Itemid 是它的主键(在本地和服务器上)并且 id 是在服务器 mysql db 上自动生成的。我正在使用 Realm 在 Android 设备上存储 Items

用户可以在有/没有互联网的设备上创建和编辑项目。互联网连接可用时同步数据库。

所以当用户保存一个新的 Item 时,我应该用什么 id 将它保存在本地数据库中,这样与服务器同步就不会出现问题

示例:

John 在他的 Moto XSamsung S6 上有 3 个 Items 并且两部手机都同步到服务器。

他将 Moto X 设置为飞行模式,并在 Samsung S6 上添加了一个 Item 并同步到服务器。

现在,S6 具有 ID 为 -> 1,2,3,4 的项目

Moto X 的项目的 id -> 1,2,3

当 Moto X 连接到互联网时,它将下载 id=4 的 Item,但它仍处于飞行模式。

虽然 Moto X 仍处于离线状态,但约翰在其上添加了一个 Item。我应该给本地数据库上的这个新 Item 什么 id,以便在同步 Moto X 时它不会造成任何问题? John 应该能够在离线 Moto X 上编辑这个新的 Item,所以 id 不能留空。

谢谢

最佳答案

只是吐口水...

向 Item 类添加 int local_idint device_id。每个与服务器交互的设备都将获得一个唯一且持久的 device_id。当在没有互联网连接的设备上创建项目时,如果需要编辑项目,设备可以引用 local_id。当设备连接上一个Item(!isSynced && id == null)时,将Item发送到DB中进行insert操作,然后通过查找local_id和device_id找到新插入的DB行的主键。主键值被发送回设备,Item 在服务器上的主键被设置为 Item 本地副本上的 id 并将 isSynced 设置为 true。

ETA:从数据库服务器检索在其他设备上创建的项目时,将这些项目放入设备表时需要省略外部 local_id

ETA2:您需要更改设备上的表设置,以便 local_id 是主键,id 是唯一的。但当然 id 仍然是数据库服务器上表的主键。

关于android - 在同步到服务器之前要在本地 android 数据库上设置什么主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32412251/

相关文章:

Android 电视盒在 10 秒内关闭我的应用程序

java - 在 Subversion 项目结构中寻找配置和数据库模式文件的正确处理

javascript - 在 Node.js 中,哪些存储技术可用于实时游戏

python - 数据库错误django

visual-studio-2010 - 在 Visual Studio 2010 中的计算机之间同步设置

perforce - 通过 VPN 更快速干净的 Perforce 同步

Android AutoSync 运行间隔?

java - 第一次按下时 KEYCODE_BACK 不起作用

android - HMS 地理编码功能

android - Trigger.io 原生插件和源代码控制