【问题标题】:Run application/activity at first time首次运行应用程序/活动
【发布时间】:2011-08-24 11:02:14
【问题描述】:

我需要识别我的应用程序或活动的首次启动。

此时我需要从服务器创建本地数据库中获取一些信息并将信息保存到其中。最好的方法是什么?

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

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

【问题讨论】:

    标签: android ormlite


    【解决方案1】:

    对于“在第一次运行时创建数据库”的目的,您应该使用SQLiteOpenHelper,它为您提供onCreate()-method,它在以下情况下被调用:

    [...] 首次创建数据库。

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


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

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

    • 如果有,请获取您的信息。
    • 如果没有,请显示 Toast 或其他通知以通知用户。

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

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

    此外,getReadableDatabase() / getWritableDatabase() 方法无论如何都应该从主线程中调用,因为:

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

    因此,可以通过onCreate() 和onOpen() 方法从Internet 获取信息(如果第一次尝试没有成功)。您可以(例如)使用Service 来执行此操作。

    【讨论】:

    • 感谢您的回复。我正在使用 ormlite 作为我的应用程序的 orm 框架。 ormlite 有类 OrmLiteSqliteOpenHelper 扩展了 SQLiteOpenHelper,它覆盖了 onCreate 方法。在这个方法中,我正在创建我的表格。您认为这是调用服务器并填充我的数据库的好地方吗?当我尝试获取服务器信息时出现一些冲突怎么办,例如互联网连接问题或其他问题?
    • 我更新了我的帖子以添加更多关于此的研究。检查这是否对您有帮助。
    • 再次感谢您的回复。我知道你的回复的主要想法。 1) - 检查数据库版本 2) - 如果版本等于 0 - 填充数据库并设置数据库版本 = 1, 3) 如果版本 1 或更高版本打开数据库以获取一些信息。对?你说数据库人口进程必须不在主线程中。异步任务呢?我想为数据库填充创建 AsyncTask 并在需要时调用它,例如数据库升级。谢谢。
    • 只要不使用主线程就可以了。但是AsyncTask 的一些功能在 API 级别 11 中引入(例如 CursorLoader )所以我不确定你的应用程序是否需要在低于 Android 3.0 的设备上运行但如果你想要它会很好使用它。
    • 你可以这样做,或者你覆盖onUpgrade()-方法只在数据库版本为(start_version + 1) ++时执行
    【解决方案2】:

    如果你想用数据库解决这个问题: 使用 MyDatabasaVersion 表创建数据库并将您的版本存储在一行中,例如 db_version 默认值为 0。第一次应用程序启动时检查 db_version 如果为 0,则需要启动同步,完成后将 db_version 设置为 1 .

    【讨论】:

    • 有趣的方法。这种方式有什么好处?我在首选项中存储了一些标志以识别首次启动。如果我需要升级我的数据库怎么办?
    • 我们正在移动端使用这种可能性。服务器数据库通常由用户更新,然后在服务器端增加版本号。而客户端启动同步的第一步是检查版本,如果版本不相等则需要升级本地数据库。
    • 在我的情况下,用户在服务器上有一个帐户,我的应用程序只是一个客户端。用户可以通过网络和我的应用程序更新服务器上的数据库。为了避免不必要的服务器调用,我想在本地数据库中存储一些数据。就我而言,我无法在服务器端检查数据库版本。
    • 如果您不想将修改后的数据保存在手机本地,您可以使用Preferences轻松进行初始化并将数据存储在DB中(例如用户信息)。
    【解决方案3】:

    最简单的方法应该是共享首选项。您可以在应用程序上下文的任何地方调用它,并且可以将布尔值放入其中。

    Here 都是 Android 存储。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多