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

时间:2013-02-06 13:46:30

标签: android sqlite android-sqlite

我有两个问题:

  1. 我想将Web服务中的数据插入到本地SQLite DB中。我想只插入一次这个数据,然后下次不从Web服务加载。 我尝试过使用静态变量但是没有用。

    static int UpdateOneTime = 0;

    if(UpdateOneTime == 0){

    的getData();

    UpdateOneTime ++;

    }

  2. 如果我想再次重新加载数据意味着当应用程序每次从服务器获取数据并通过删除表中的先前数据插入数据库时​​启动。 我试过只调用onUpgrade(SqliteDatabase db, int oldversion,int newversion); 但它没有奏效。那么如何解决这两个问题呢。建议我。

3 个答案:

答案 0 :(得分:1)

不要在静态变量中保持插入\未插入的值。每次应用程序启动时,值都将具有默认值。在第一次插入数据后,您可以在首选项中保存一些值,然后在每次应用程序启动时进行检查

答案 1 :(得分:1)

对于1.,你应该@override函数onCreate,它将创建你的数据库,然后你可以在那里执行一些查询。只有当您请求数据库并且设备注意到数据库尚不存在时,才会调用此函数。

第二名。你不能手动调用它,如果我记得的话,它是一个在升级数据库版本时调用的函数。这是通过SQLiteOpenHelper类的构造来管理的。

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

答案 2 :(得分:0)

对于第一点:你可以按照Marco的回答。

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

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

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


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

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

通过互联网阅读有关应用程序类示例的更多信息。 http://developer.android.com/reference/android/app/Application.html