【发布时间】:2011-08-24 11:02:14
【问题描述】:
我需要识别我的应用程序或活动的首次启动。
此时我需要从服务器创建本地数据库中获取一些信息并将信息保存到其中。最好的方法是什么?
- 创建任何首选项,例如
FirstLaunch并将true\false设置为它。 - 检查我的数据库是否存在。
- 还有别的吗?
PS。所有服务器调用必须在一个事务中。 Ormlite 支持交易吗? 谢谢。
【问题讨论】:
我需要识别我的应用程序或活动的首次启动。
此时我需要从服务器创建本地数据库中获取一些信息并将信息保存到其中。最好的方法是什么?
FirstLaunch 并将 true \ false 设置为它。PS。所有服务器调用必须在一个事务中。 Ormlite 支持交易吗? 谢谢。
【问题讨论】:
对于“在第一次运行时创建数据库”的目的,您应该使用SQLiteOpenHelper,它为您提供onCreate()-method,它在以下情况下被调用:
[...] 首次创建数据库。
将为您创建数据库文件本身(您不必手动执行此操作)。在此方法中,您可以执行诸如使用标准条目填充数据库之类的操作。
如果您想使用从服务器获取的信息填充数据库,则在没有可用的 Internet 连接时可能会出现问题。
在这种情况下,我会检查是否有可用的连接:
要确定您的数据库是否已填充标准条目,您可以使用SQLiteDatabase-class 也提供的数据库版本:
SQLiteOpenHelpers 构造函数并将其传递给 0 作为数据库
版本。setVersion()-method 将其更改为 1。onOpen()-method,当
打开数据库,您可以检查数据库是否由
使用getVersion()-method。
此外,getReadableDatabase() / getWritableDatabase() 方法无论如何都应该从主线程中调用,因为:
数据库升级可能需要很长时间,你不应该调用这个方法 从应用程序主线程,包括从 ContentProvider.onCreate()。
因此,可以通过onCreate() 和onOpen() 方法从Internet 获取信息(如果第一次尝试没有成功)。您可以(例如)使用Service 来执行此操作。
【讨论】:
AsyncTask 的一些功能在 API 级别 11 中引入(例如 CursorLoader )所以我不确定你的应用程序是否需要在低于 Android 3.0 的设备上运行但如果你想要它会很好使用它。
onUpgrade()-方法只在数据库版本为(start_version + 1) ++时执行
如果你想用数据库解决这个问题: 使用 MyDatabasaVersion 表创建数据库并将您的版本存储在一行中,例如 db_version 默认值为 0。第一次应用程序启动时检查 db_version 如果为 0,则需要启动同步,完成后将 db_version 设置为 1 .
【讨论】:
最简单的方法应该是共享首选项。您可以在应用程序上下文的任何地方调用它,并且可以将布尔值放入其中。
Here 都是 Android 存储。
【讨论】:
你应该尝试第一个选项Create any preferences for example FirstLaunch and set true \ false to it.
【讨论】: