我需要首先发布我的应用程序或活动。第一次运行应用程序/活动
此时我需要从服务器创建本地数据库获取一些信息并保存信息。做这个的最好方式是什么?
- 例如
FirstLaunch
创建任何首选项,设置true
\false
它。 - 检查我的数据库是否存在。
- 还有别的吗?
PS。所有服务器调用都必须在一个事务中。 Ormlite支持交易? 谢谢。
我需要首先发布我的应用程序或活动。第一次运行应用程序/活动
此时我需要从服务器创建本地数据库获取一些信息并保存信息。做这个的最好方式是什么?
FirstLaunch
创建任何首选项,设置true
\ false
它。PS。所有服务器调用都必须在一个事务中。 Ormlite支持交易? 谢谢。
对于“创先运行数据库”万用,您应该使用一个SQLiteOpenHelper
,它提供了可以被称为当onCreate()
-method:
[。 ..]数据库是第一次创建。
数据库文件本身将为您创建(您不必手动执行此操作)。在这种方法中,您可以执行诸如使用标准条目填充数据库的操作。
如果要使用从服务器获得的信息填充数据库,则当没有可用的Internet连接时可能会出现问题。
在这种情况下,我会检查是否有可用的连接:
要确定您的数据库与标准条目的填充,可以使用数据库版本,也是由SQLiteDatabase
-class提供:
SQLiteOpenHelper
的构造函数并将其作为0
作为数据库 版本。setVersion()
-method将其更改为1
。onOpen()
-method(打开数据库时调用 )时,可以使用getVersion()
-method检查数据库是否由 填充。
更进一步,在getReadableDatabase()
/getWritableDatabase()
- 方法应该被取消主线程反正因为:
数据库升级可能需要很长的时间,你不应该调用此方法 从应用程序主线程,包括从 ContentProvider.onCreate()。
所以得到来自互联网的信息可以在onCreate()
并在onOpen()
- 方法的地方(如果没有成功,在第一次尝试)。你可以(例如)使用Service来做到这一点。
最简单的方法应该是sharedpreferences。您可以在应用程序上下文的任何地方调用它,并且可以在其中放置布尔值。
Here都是Android存储。
你应该尝试第一个选项Create any preferences for example FirstLaunch and set true \ false to it.
如果您想用数据库解决此问题: 使用MyDatabasaVersion表创建数据库并将您的版本存储在单个行中,例如db_version默认值为0.首次当应用程序启动时,检查db_version是否为0需要启动syncronisation,完成后将db_version设置为1.
时执行有趣的方法。这种方式有什么好处?我喜欢在首选项中存储一些标志以识别首次发布。如果我需要升级我的数据库呢? –
我们在移动端使用这种可能性。服务器数据库通常由用户更新,之后版本号在服务器端增长。当客户端启动同步时,第一步是检查版本,如果版本不相同,则需要升级本地数据库。 – kameny
在我的情况下,用户在服务器上有一个帐户,我的应用程序只是一个客户端。用户可以通过网络和我的应用更新服务器上的数据库。为了避免不必要的服务器调用,我希望将一些数据存储在本地数据库中。在我的情况下,我无法检查服务器端的数据库版本。 –
感谢您的回复。我使用ormlite作为我的应用程序的orm框架。 ormlite有类OrmLiteSqliteOpenHelper扩展SQLiteOpenHelper,它重写onCreate方法。在这个年代,我创建了我的桌子。你认为这是一个打电话给服务器并填充我的数据库的好地方吗?当我尝试获取服务器信息时,如何处理一些冲突,例如互联网连接问题或其他问题? –
我更新了我的帖子,为此添加了更多的研究。检查这是否有助于你。 –
再次感谢您的回复。我对你的答复有了一个主要想法。 1) - 检查数据库版本2) - 如果版本等于0 - 填充数据库并设置数据库版本= 1,3)如果版本1或更高版本打开数据库以获取某些信息。对?你说数据库人口进动必须不在主线之内。那AsyncTask呢?我想为数据库填充创建AsyncTask,并在需要时调用它,例如数据库升级。谢谢。 –