【问题标题】:Android upgrading app without losing data安卓升级应用不丢失数据
【发布时间】:2015-01-20 20:25:48
【问题描述】:

我有一个问题,我想升级我的应用,但我不想丢失存储的数据。

问题是在我的数据库代码中我有这个:

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + POINTS_TABLE);
    db.execSQL("DROP TABLE IF EXISTS " + NETWORKS_TABLE);
    onCreate(db);
}

我也想过各种数据备份,这样我至少可以保存数据,然后进行升级。问题是我认为我只有两个选择:

a) 根设备 b) 通过 USB 连接

问题是设备 USB 不工作。我的电脑似乎无法识别它。

还有什么可以保存我的数据吗?我已经尝试过应用程序 Astro、Super Backup、Titanium Backup,但它们都需要 root。问题是,没有 USB 数据线我无法 root。

我的平板电脑是三星 Galaxy Tab 2 7.0。有小费吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    onCreate 你可以做"CREATE TABLE IF NOT EXISTS"

    onUpdate 中,您可以在需要时使用"ALTER TABLE"

    【讨论】:

    • 我知道我可以做到,但问题是,我仍然会丢失我当前的数据,不是吗?
    • 不,这样你就不会丢失你的数据库数据,因为任何现有的表都不会在 onCreate 中被修改。
    • 问题是,当我尝试更新我的应用程序时,它说:相同的包,但不同的签名
    • 如果之前的包是在不同的机器上开发的,或者如果之前的包是在构建调试版本时构建的版本,则可能会发生这种情况。反正跟数据库没关系。
    • 但如果我继续,我会丢失所有数据。无论如何要保证它的安全?
    【解决方案2】:

    这是数据库版本,而不是应用程序版本。如果您的数据库结构正在发生变化,您可以制定更智能的升级路径。 http://blog.adamsbros.org/2012/02/28/upgrade-android-sqlite-database/ 的一个例子是:

    public void onUpgrade(
            final SQLiteDatabase db, final int oldVersion,
            final int newVersion)
        {
            int upgradeTo = oldVersion + 1;
            while (upgradeTo <= newVersion)
            {
                switch (upgradeTo)
                {
                    case 5:
                        db.execSQL(SQLiteSet.V5_ADD_LAST_CARD);
                        db.execSQL(SQLiteCard.V5_ADD_FAILED);
                        break;
                    case 6:
                        db.execSQL(SQLiteSet.V6_ADD_IMPORT_TYPE);
                        break;
                    case 7:
                        db.execSQL(SQLiteSet.V7_ADD_SHORT_FNAME);
                        break;
                }
                upgradeTo++;
            }
        }
    

    【讨论】:

    • 但是当我改变我的应用程序版本时,它不会也改变我的数据库版本吗?
    • 问题是,当我尝试更新我的应用程序时,它说:相同的包,但不同的签名
    • 这是签名密钥。您正在使用来自两个不同系统的调试密钥,或者您正在尝试安装调试版本而不是生产版本。
    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    • 2020-10-30
    相关资源
    最近更新 更多