【问题标题】:Android: Insert the data into the local db only once when app launchAndroid:应用启动时仅将数据插入本地数据库一次
【发布时间】:2017-03-28 09:36:51
【问题描述】:
我有两个疑问:
-
我想将来自 Web 服务的数据插入到本地 SQLite 数据库中。我只想插入此数据一次,然后下次它不会从 Web 服务加载。
我曾尝试使用静态变量,但没有奏效。
静态 int UpdateOneTime=0;
如果 (UpdateOneTime==0) {
getData();
UpdateOneTime++;
}
如果我想再次重新加载数据意味着当应用程序每次启动时,它都会从服务器获取数据并通过删除表中的先前数据插入到数据库中。
我试过打电话给onUpgrade(SqliteDatabase db, int oldversion,int newversion);
但它没有奏效。那么如何解决这两个问题。给我一些建议。
【问题讨论】:
标签:
android
sqlite
android-sqlite
【解决方案1】:
不要在静态变量中保留插入\未插入的值。每次应用程序启动时的值都会有默认值。首次插入数据后,您可以在首选项中保存一些值,然后在每次应用启动时检查它
【解决方案2】:
对于 1.,您应该 @override 函数 onCreate,它将创建您的数据库,然后您可以在那里执行一些查询。只有当您请求数据库并且设备注意到数据库尚不存在时才会调用此函数。
第二个。如果我记得的话,您不必手动调用它,而是在升级数据库版本时调用它。这是通过SQLiteOpenHelper 类的构造来管理的。
注意:onCreate 和 onUpgrade 都是在创建数据库和升级数据库结构时调用的函数,而不是数据。
【解决方案3】:
对于第一点:您可以按照 Marco 的回答。
如果我是你,
我将创建一个具有标志默认值的配置表,并使其等于 false。
在活动的 oncreate() 方法中,如果它等于 false,我将查询该值,然后我永远不会从 WS 加载该数据。如果它等于真,那么这意味着我之前加载了该数据,所以我可以使用之前保存在数据库中的本地数据。
如果为 false,您将从 WS 加载该数据,在确保加载并成功插入后,您必须更新此标志以使其值等于 true,以避免在下一次重新加载数据打开应用程序的时间。
我认为您可以使用 sharedPreference 代替配置表。
第 2 点:
您希望每次应用程序删除旧数据并重新加载并再次插入数据:
您将正常创建您的 SQLite DB,然后您可以创建一个扩展 Application 类的类,该类是应用程序打开后将加载的第一个类,它包含一个 onCreate() 方法,您可以先删除所有记录,然后重新加载所有数据并将其插入本地 SQLite DB。
注意:不要忘记在 androidMainfest.xml 文件中添加一个标签来引用您的应用程序类,这是必须的步骤。
在 Internet 上阅读有关应用程序类示例的更多信息。
http://developer.android.com/reference/android/app/Application.html