2011-08-24 73 views
0

我需要首先发布我的应用程序或活动。第一次运行应用程序/活动

此时我需要从服务器创建本地数据库获取一些信息并保存信息。做这个的最好方式是什么?

  1. 例如FirstLaunch创建任何首选项,设置true \ false它。
  2. 检查我的数据库是否存在。
  3. 还有别的吗?

PS。所有服务器调用都必须在一个事务中。 Ormlite支持交易? 谢谢。

回答

3

对于“创先运行数据库”万用,您应该使用一个SQLiteOpenHelper,它提供了可以被称为当onCreate()-method

[。 ..]数据库是第一次创建。

数据库文件本身将为您创建(您不必手动执行此操作)。在这种方法中,您可以执行诸如使用标准条目填充数据库的操作。


如果要使用从服务器获得的信息填充数据库,则当没有可用的Internet连接时可能会出现问题。

在这种情况下,我会检查是否有可用的连接:

  • 如果有,让你的信息。
  • 如果没有,则显示Toast或其他通知以通知用户。

要确定您的数据库与标准条目的填充,可以使用数据库版本,也是由SQLiteDatabase -class提供:

  • 当你第一次创建数据库对象,请拨打 SQLiteOpenHelper的构造函数并将其作为0作为数据库 版本。
  • 如果成功填充数据库,则使用 setVersion()-method将其更改为1
  • 稍后在onOpen()-method(打开数据库时调用 )时,可以使用getVersion()-method检查数据库是否由 填充。
    • 如果已填充,请调用超级方法将其打开。
    • 如果没有,请尝试填充它。

更进一步,在getReadableDatabase()/getWritableDatabase() - 方法应该被取消主线程反正因为:

数据库升级可能需要很长的时间,你不应该调用此方法 从应用程序主线程,包括从 ContentProvider.onCreate()。

所以得到来自互联网的信息可以在onCreate()并在onOpen() - 方法的地方(如果没有成功,在第一次尝试)。你可以(例如)使用Service来做到这一点。

+0

感谢您的回复。我使用ormlite作为我的应用程序的orm框架。 ormlite有类OrmLiteSqliteOpenHelper扩展SQLiteOpenHelper,它重写onCreate方法。在这个年代,我创建了我的桌子。你认为这是一个打电话给服务器并填充我的数据库的好地方吗?当我尝试获取服务器信息时,如何处理一些冲突,例如互联网连接问题或其他问题? –

+0

我更新了我的帖子,为此添加了更多的研究。检查这是否有助于你。 –

+0

再次感谢您的回复。我对你的答复有了一个主要想法。 1) - 检查数据库版本2) - 如果版本等于0 - 填充数据库并设置数据库版本= 1,3)如果版本1或更高版本打开数据库以获取某些信息。对?你说数据库人口进动必须不在主线之内。那AsyncTask呢?我想为数据库填充创建AsyncTask,并在需要时调用它,例如数据库升级。谢谢。 –

0

最简单的方法应该是sharedpreferences。您可以在应用程序上下文的任何地方调用它,并且可以在其中放置布尔值。

Here都是Android存储。

0

你应该尝试第一个选项Create any preferences for example FirstLaunch and set true \ false to it.

1

如果您想用数据库解决此问题: 使用MyDatabasaVersion表创建数据库并将您的版本存储在单个行中,例如db_version默认值为0.首次当应用程序启动时,检查db_version是否为0需要启动syncronisation,完成后将db_version设置为1.

+0

时执行有趣的方法。这种方式有什么好处?我喜欢在首选项中存储一些标志以识别首次发布。如果我需要升级我的数据库呢? –

+0

我们在移动端使用这种可能性。服务器数据库通常由用户更新,之后版本号在服务器端增长。当客户端启动同步时,第一步是检查版本,如果版本不相同,则需要升级本地数据库。 – kameny

+0

在我的情况下,用户在服务器上有一个帐户,我的应用程序只是一个客户端。用户可以通过网络和我的应用更新服务器上的数据库。为了避免不必要的服务器调用,我希望将一些数据存储在本地数据库中。在我的情况下,我无法检查服务器端的数据库版本。 –

相关问题