我有一个Android应用程序连接到服务器api (CRUD)来管理模型。应用程序需要离线工作,因此应用程序有一个数据库来存储从服务器中提取的数据。
模型的实例有一个名为ID的属性,它是在服务器中创建的。
为了执行创建脱机操作,我遇到了一个困难的问题。由于没有连接,我需要将实体存储到数据库,但是它还没有id。做这件事的最佳通用解决方案是什么?
我是否应该在数据库中添加第二个属性,即“the”(例如使用一个UID)?也许我没有将这些数据添加到数据库中,而是添加到一个时态队列中?与这个实体的关系会发生什么?
发布于 2014-09-22 09:30:58
您将始终需要为您的行提供一个本地id,用作主键(可以是增量式的,这将使事情变得更容易)。在此之后,只要您与服务器同步,您也将拥有一个远程id,此远程id将用于将本地行与服务器中的远程行链接起来。
所以,
-when您从服务器获得一行,确保您填充远程id,并让SQLite填充本地id,
-when从移动设备(或数据库中没有远程键的所有条目)创建一行,使用本地id (将从服务器上忽略它)发送它,然后从服务器分配一个新的远程id。最后,您的服务器应该返回填充远程id字段的新行,从而完成整个周期。
希望它能帮上忙
编辑:
为了实现这一点,您的移动和服务器表将略有不同。在您的服务器中,您将拥有一个本地id,这个本地id必须与您的移动中的远程id相匹配。
如果您为服务器获得一行,则需要检查是否有远程id (即链接器字段)。如果没有带有该远程id的任何行,则将插入新行,否则将更新它们。
只有一件事要完成这个过程,当您向服务器发送一行时,您将需要一个额外的字段(在json或您的xml中),它将告诉您您的行是您的。
只存在一种情况,即您将从服务器接收移动本地id,并且是在您上载新行时。
在这种情况下,您将接收您的移动本地id和远程id。现在,您将能够将本地信息与远程信息链接起来。
摘要:
当您从服务器获得新行时,您将只接收移动远程id (服务器本地id),使用此远程id检查是否需要更新或插入。
当您向服务器发送行时,服务器将返回本地移动id和远程移动id,这样,您将知道接收到的行是您的。在这种情况下,您必须更新本地行来存储远程移动id。
服务器永远不会存储本地移动it,因为这是没有意义的。
https://stackoverflow.com/questions/25970537
复制相似问题