Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
防止将数据重新插入数据库表[Android]_Android_Sql_Database_Android Contentprovider - Fatal编程技术网

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

防止将数据重新插入数据库表[Android],android,sql,database,android-contentprovider,Android,Sql,Database,Android Contentprovider,现在,我正在做一个项目,涉及从MovieDB获取电影数据。我使用Schematic作为我的内容提供者生成器,以避免制作一个内容提供者生成器的麻烦。到目前为止效果很好 这里我要问的问题是我的代码是如何构造的。现在,包含AsyncTask的片段调用任务以获取数据,每次应用程序加载MainActivity时都会调用该任务。数据被提取并插入到数据库表中;游标不会返回null并获取我存储的数据。然而,我遇到了一个我认为是问题的地方,我再次获取数据并将其存储到同一个数据库中。如果我加载到DetailActi

现在,我正在做一个项目,涉及从MovieDB获取电影数据。我使用Schematic作为我的内容提供者生成器,以避免制作一个内容提供者生成器的麻烦。到目前为止效果很好

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

日志语句似乎表明我的数据再次被重新插入,导致同一数据库表中的相同条目重复出现。我可以想出一些临时解决方案,其中一个是在启动应用程序时取消获取数据的调用,而不是通过使用操作栏上的刷新按钮获取数据。另一个方法可能是使表的列唯一,特别是保存youtube视频键的youtube视频键字符串。我现在还不确定该怎么办


如果有任何解决方案,我将不胜感激。谢谢。

添加
唯一
键,使用
替换
作为冲突解决方案

像这样的

@DataType(DataType.Type.INTEGER)
@PrimaryKey(onConflict = ConflictResolutionType.REPLACE)
String UNIQUE_COLUMN = "unique_column";
它与
@PrimaryKey
@Unique
@Check
一起工作。更多信息可以在和SQlite的文档中找到

有一些限制:

  • 如果存在多个
    @PrimaryKey
    ,则原理图将忽略
    onConflict
  • resolution
    Replace
    将替换一行中的所有列,而不仅仅是insert中提供的列

添加
唯一
键,使用
替换
作为冲突解决方案

像这样的

@DataType(DataType.Type.INTEGER)
@PrimaryKey(onConflict = ConflictResolutionType.REPLACE)
String UNIQUE_COLUMN = "unique_column";
它与
@PrimaryKey
@Unique
@Check
一起工作。更多信息可以在和SQlite的文档中找到

有一些限制:

  • 如果存在多个
    @PrimaryKey
    ,则原理图将忽略
    onConflict
  • resolution
    Replace
    将替换一行中的所有列,而不仅仅是insert中提供的列

你不能吗?我会在这之后睡前醒来尝试一下。由于“我的表”的设置方式,当同一部电影有多个视频链接时,它们会存在多个条目。我假设Youtube视频键(URI中watch查询参数后的#)是唯一的。不,试过了。将约束设置为唯一将使应用程序在尝试重新插入时崩溃。在重新插入之前,您需要检查它是否已经存在…您不能吗?我会在醒来后再尝试一下,然后再睡觉。由于“我的表”的设置方式,当同一部电影有多个视频链接时,它们会存在多个条目。我假设Youtube视频键(URI中watch查询参数后的#)是唯一的。不,试过了。设置约束唯一将使应用程序在尝试重新插入时崩溃。在重新插入之前,您需要检查它是否已经存在。。。