关于OTA升级从高版本到低版本升级后,数据库无法降级引起的异常分析

1.问题描述:

OTA升级从高版本升级到低版本成功,开机后桌面闹钟图标不见了,且桌面闹钟报错,无法打开应用。

参考log如下:

01-14 20:29:22.290: E/AndroidRuntime(2722): FATAL EXCEPTION: AsyncHandler

01-14 20:29:22.290: E/AndroidRuntime(2722): Process: com.android.deskclock, PID: 2722

01-14 20:29:22.290: E/AndroidRuntime(2722): android.database.sqlite.SQLiteException: Can‘t downgrade database from version 10 to 7

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.database.sqlite.SQLiteOpenHelper.onDowngrade(SQLiteOpenHelper.java:361)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:255)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:188)

01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.provider.ClockProvider.query(ClockProvider.java:96)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentProvider.query(ContentProvider.java:922)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentProvider$Transport.query(ContentProvider.java:213)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentResolver.query(ContentResolver.java:462)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.content.ContentResolver.query(ContentResolver.java:405)

01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.provider.AlarmInstance.getInstances(AlarmInstance.java:188)

01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.alarms.AlarmStateManager.FixAlarmInstancesForReboot(AlarmStateManager.java:684)

01-14 20:29:22.290: E/AndroidRuntime(2722): at com.android.deskclock.AlarmInitReceiver$1.run(AlarmInitReceiver.java:102)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.Handler.handleCallback(Handler.java:808)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.Handler.dispatchMessage(Handler.java:103)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.Looper.loop(Looper.java:193)

01-14 20:29:22.290: E/AndroidRuntime(2722): at android.os.HandlerThread.run(HandlerThread.java:61)

2.分析结果:

从上面的log中可以看到,此类异常由数据库无法将降级导致,此时恢复出厂设置可以恢复正常。

3.解决方案

可通过在DatabaseHelper.java重写父类SQLiteOpenHelper.java的onDowngrade()方法来规避该问题,或者直接在SQLiteOpenHelper.java中对该方法就行修改。

 public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {

     throw new SQLiteException("Can‘t downgrade database from version " +

             oldVersion + " to " + newVersion);

}

时间: 2024-10-29 04:48:18

关于OTA升级从高版本到低版本升级后,数据库无法降级引起的异常分析的相关文章

Android 开源项目android-open-project工具库解析之(二) 高版本向低版本兼容,多媒体相关,事件总线(订阅者模式),传感器,安全,插件化,文件

六.Android 高版本向低版本兼容 ActionBarSherlock 为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题 项目地址:https://github.com/JakeWharton/ActionBarSherlock Demo地址:https://play.google.com/store/apps/details?id=com.actionbarsherlock.sample.demos APP示例:太多了..现在连google都

nodejs高版本转低版本

需要安装 第一步: npm install --save-dev babel-register npm install --save-dev babel-polyfill //由于只安装babel-register,无法解决低版本问题所以需要这个 npm install --save-dev babel-preset-latest //高版本到低版本js的一条路需要指定babelrc 最后需要创建文件: .babelrc//无扩展名 { "presets": ["latest

CAD图纸高版本转低版本使用迅捷CAD转换器怎么进行?

CAD图纸高版本转低版本使用迅捷CAD转换器怎么进行?CAD图纸文件会由于版本等相关问题而无法将其进行打开的情况发生,解决其最好的方法就是将CAD图纸文件进行版本间的转换操作了,具体应该怎么样进行,使用哪一款软件才能够将其进行转换完成,下面小编就要来教大家的就是CAD图纸高版本转低版本使用迅捷CAD转换器怎么进行的全部操作步骤,希望能够帮助到你们,望采纳! 步骤一:要打开我们自己使用的电脑,打开浏览器在搜索框中输入"迅捷CAD转换器"然后去到迅捷CAD官网上面点击下载然后进行安装! 步

转 - Android Studio 低版本Gradle升级到高版本时常见问题

来自: http://blog.csdn.net/feiniao8651/article/details/44652753 今天拿到一个用低版本Gradle的编译的Android工程,gradle对版本的向下兼容做的不太好,因此在高版本Gradle的电脑上会出很多问题. 1. Error:The project is using an unsupported version of the Android Gradle plug-in (0.12.2). The recommended versi

html5调用本机摄像头兼容谷歌浏览器高版本,谷歌浏览器低版本,火狐浏览器

做这个功能的时候在网上查了一些资料,代码如下,在这个代码在谷歌浏览器46版本是没问题的,在火狐浏览器也行,但是在谷歌浏览器高版本下是不兼容的 <div id="body"> <section class="featured"> <div class="content-wrapper"> <hgroup class="title"> <h1>Welcome to web

用Visual Studio高版本打开低版本的工程,转换时出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

解决方法是: 在电脑里面搜索发现 C:\Program Files\Microsoft Visual Studio 10.0\VC\bin C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_b03f5f7f11d50a3a_6.1.7600.16385_none_ba476986f05abc65  (路径的最后部分可能会不完全一致,会有两三个"C:\Windows\winsxs\x86_netfx-cvtres_for_vc_and_vb_&quo

Docker卸载高版本重装低版本后启动提示:driver not supported

解决方法: mv /var/lib/docker /var/lib/docker.old 其实就是docker镜像文件夹目录作怪,新版本的目录无法与旧版本目录相兼容. 不过建议降级的用户这样操作: yum downgrade --setopt=obsoletes=0 -y docker-ce-${version} docker-ce-selinux-${version} ${version}指定了要降级到的版本. 原文地址:https://www.cnblogs.com/EasonJim/p/1

sql server实现高版本向低版本兼容

用的是sql server2014要然后现在要将2014数据库的数据放到2012中操作如: 一,先用2014的数据库导出表结构和数据: 选择需要导出的数据 右键---任务---生成脚本 ---根据下面截图进行操作---点击确认后选择在新窗口显示最后一直下一步到最后. 二,在低版本数据库中新建一个新的数据库,将到出来的脚本直接在新建的数据库中跑即可.

mysql 4.0数据库 升级到高版本

1.从4.0中导出表 mysqldump –no-data -uroot -p database > struct.sql 2.导出数据 mysqldump –no-create-info=true –extended-insert=false -u root -p database > data.sql 3.用vi编辑struct.sql, 使用最末行命令 :%s/) TYPE=MyISAM;/) ENGINE=MyISAM DEFAULT CHARSET=gbk;/g :%s/) TYPE