防止将数据重新插入数据库表[Android]

时间:2015-12-03 13:16:52

标签: android sql database android-contentprovider

现在,我正在开发一个涉及从MovieDB中获取电影数据的项目。我使用Schematic作为我的内容提供程序生成器,以避免制作一个令人头痛的问题。到目前为止工作正常。

我在这里问的问题是我的代码是如何构建的。现在,我的包含AsyncTask的片段调用了获取数据的任务,每次应用加载MainActivity时都会调用该数据。获取数据并将其插入数据库表中;游标不会返回null并获取我存储的数据。但是,我遇到了这个问题,我认为这是一个问题,我再次获取数据并将其存储到同一个数据库中。如果我加载到DetailActivity,SettingsActivity或任何其他活动导致远离MainActivity但将通过后退按钮返回它,则会发生这种情况。

日志语句似乎表明我的数据再次重新插入,导致同一数据库表中相同条目的两倍等。我可以想到一些临时解决方案,其中一个解决方案是在启动应用程序时删除获取数据的调用,而不是通过使用Action Bar上的刷新按钮来获取数据。另一个可能是使表格的列唯一,特别是youtube视频密钥字符串,其中包含youtube视频的密钥。我现在还不确定该怎么做。

我会非常感谢任何解决方案。感谢。

1 个答案:

答案 0 :(得分:0)

使用Unique添加Primaryreplace密钥作为冲突解决方案。

像这样的东西

@DataType(DataType.Type.INTEGER)
@PrimaryKey(onConflict = ConflictResolutionType.REPLACE)
String UNIQUE_COLUMN = "unique_column";

适用于@PrimaryKey@Unique@Check。有关详细信息,请参阅Schematic's JavaDoc和SQlite的ON CONFLICT文档。

有一些限制:

  • 如果存在多个onConflict,示意图将忽略@PrimaryKey
  • 分辨率Replace将替换插入中提供的行中的所有列,而不仅仅是列。