代码之家  ›  专栏  ›  技术社区  ›  gurehbgui

如何检查是否必须在应用程序中执行更新代码?

  •  0
  • gurehbgui  · 技术社区  · 11 年前

    我有以下问题:

    我在商店里有一个应用程序, version code 1 现在我正在为此应用程序进行更新。 问题是,如果用户已经保存了数据,我必须在用户更新后第一次运行应用程序时更新数据 version code 2 .

    我的问题是,如何在android中实现这一点?这可能吗?

    伪代码应该如下所示:

    protected void onCreate(Bundle savedInstanceState) {
        if (old_version == 1 && version_now == 2)
        {
            // my update code which will only performed once in a lifetime of the app
        }
        // ...
    }
    
    2 回复  |  直到 11 年前
        1
  •  0
  •   Community davidgyoung    7 年前

    阅读应用程序版本,运行您的代码并存储在SharedPreferences中,即您已经运行了代码。这些问题描述得很好:

    应用程序版本/名称: How to get the build/version number of your Android application?

    仅运行一次: Run code only once after an application is installed on Android device

        2
  •  0
  •   Daniel    11 年前

    如果您正在使用 SQLiteOpenHelper 为了管理查询,有一种方法称为 OnUpgrade 当用户升级了他的应用程序,并且新版本的应用程序的版本代码比以前的版本代码大时,就会调用它。

    示例使用:

    public static void onUpgrade(SQLiteDatabase database, int oldVersion,
      int newVersion) {
        Log.w(TodoTable.class.getName(), "Upgrading database from version "
        + oldVersion + " to " + newVersion
        + ", which will destroy all old data");
        database.execSQL("DROP TABLE IF EXISTS " + TABLE_TODO);
        onCreate(database);
    }
    

    在这里,如果您不想只删除表,可以使用oldVersion和newVersion对数据库进行增量更新。您必须确保数据库版本号是递增的。数据库版本号作为构造函数参数传递给SQLiteOpenHelper。

    增量升级示例:

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {                     
            if (newVersion > oldVersion) {
                db.beginTransaction();
    
                boolean success = true;
                for (int i = oldVersion ; i < newVersion ; ++i) {
                    int nextVersion = i + 1;
                    switch (nextVersion) {
                    case 2:
                        success = upgradeToVersion2(db);
                        break;
    
                        // etc. for later versions.
                    case 3:
                        success = upgradeToVersion3(db);
                        break;
                    }
    
    
                    if (!success) {
                        break;
                    }
                }
    
                if (success) {
                    db.setTransactionSuccessful();
                }
                db.endTransaction();
            }
    
        }