Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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_Sqlite_Android Sqlite - Fatal编程技术网

Android:在应用程序启动时,仅将数据插入本地数据库一次

Android:在应用程序启动时,仅将数据插入本地数据库一次,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我有两个问题: 我想将web服务中的数据插入本地SQLite数据库。我只想插入此数据一次,下次将不会从web服务加载此数据。 我尝试过使用静态变量,但没有成功 静态int updatetime=0 如果(UpdateOneTime==0){ getData() UpdateOneTime++ } 如果我想重新加载数据,这意味着每次应用程序启动时,它都会从服务器获取数据,并通过删除表中以前的数据插入数据库。 我试着调用onUpgrade(sqlitedatabasedb,intoldversion

我有两个问题:

  • 我想将web服务中的数据插入本地SQLite数据库。我只想插入此数据一次,下次将不会从web服务加载此数据。 我尝试过使用静态变量,但没有成功

    静态int updatetime=0

    如果(UpdateOneTime==0){

    getData()

    UpdateOneTime++

    }

  • 如果我想重新加载数据,这意味着每次应用程序启动时,它都会从服务器获取数据,并通过删除表中以前的数据插入数据库。 我试着调用onUpgrade(sqlitedatabasedb,intoldversion,intnewversion) 但它不起作用。那么如何解决这两个问题呢。给我提个建议


  • 不在静态变量中保留插入值\未插入值。每次应用程序启动时的值都将具有默认值。在第一次数据插入后,您可以在首选项中保存一些值,然后在每次应用程序启动时检查该值。对于1,您应该@override函数
    onCreate
    ,该函数将创建您的数据库,然后您可以在那里执行一些查询。仅当您请求数据库且设备注意到数据库尚不存在时,才会调用此函数

    二号。如果我记得的话,您不需要手动调用它,而是在升级数据库版本时调用的函数。这是通过构造
    SQLiteOpenHelper
    类来管理的


    注意:
    onCreate
    onUpgrade
    都是在创建数据库和升级数据库结构时调用的函数,而不是数据。

    第一点:您可以遵循Marco的答案

    但如果我是你, 我将创建一个默认值为标志的配置表,并使其等于false。 在活动中的oncreate()方法中,如果该值等于false,我将查询该值,然后我将从不从WS-Server加载该数据。如果它等于true,那么这意味着我以前加载过数据,所以我可以使用以前保存在数据库中的本地数据

    如果为false,您将从WS加载该数据,并且在确保加载并插入成功后,您必须更新该标志以使其值等于true,以避免在下次打开应用程序时重新加载数据

    我认为您可以使用SharedReference而不是配置表


    第2点: 您希望每次应用程序删除旧数据并重新加载和插入数据时: 您将正常创建SQLite DB,然后可以创建一个扩展应用程序类的类,该类是打开应用程序后将加载的第一个类,它包含onCreate()方法,您可以先删除所有记录,然后重新加载所有数据并将其插入本地SQLite DB

    注意:不要忘记在androidMainfest.xml文件中添加一个标记来引用您的应用程序类,这是一个必须的步骤

    通过internet阅读有关应用程序类示例的更多信息。