现在,我正在开发一个涉及从MovieDB中获取电影数据的项目。我使用Schematic作为我的内容提供程序生成器,以避免制作一个令人头痛的问题。到目前为止工作正常。
我在这里问的问题是我的代码是如何构建的。现在,我的包含AsyncTask的片段调用了获取数据的任务,每次应用加载MainActivity时都会调用该数据。获取数据并将其插入数据库表中;游标不会返回null并获取我存储的数据。但是,我遇到了这个问题,我认为这是一个问题,我再次获取数据并将其存储到同一个数据库中。如果我加载到DetailActivity,SettingsActivity或任何其他活动导致远离MainActivity但将通过后退按钮返回它,则会发生这种情况。
日志语句似乎表明我的数据再次重新插入,导致同一数据库表中相同条目的两倍等。我可以想到一些临时解决方案,其中一个解决方案是在启动应用程序时删除获取数据的调用,而不是通过使用Action Bar上的刷新按钮来获取数据。另一个可能是使表格的列唯一,特别是youtube视频密钥字符串,其中包含youtube视频的密钥。我现在还不确定该怎么做。
我会非常感谢任何解决方案。感谢。
答案 0 :(得分:0)
使用Unique
添加Primary
或replace
密钥作为冲突解决方案。
像这样的东西
@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
将替换插入中提供的行中的所有列,而不仅仅是列。