文档章节

Android开发错误集(二)

李海珍
 李海珍
发布于 2014/05/09 10:25
字数 548
阅读 6833
收藏 5

28: Caused by: java.lang.ClassCastException: com.xiyili.youjia.ui.start.StartGaFragment cannot be cast to android.app.Fragment

在使用Support Library库中的Fragment中时,如果使用是不是FragmentActivity的话就会报上面的错.改用FragmentActivity就OK了.


27: 在使用AppCompat的PopupMenu时出现了如下的错误:    java.lang.RuntimeException: Binary XML file line #17: You must supply a layout_height attribute.

这是因为PopupMenu是以PopupWindow来显示的,所有需要使用Activity的Context

26:     Caused by: java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCode

     startActivityForResult参数的requestCode不能太大了,所以不能超过2的16次方

25:  <item> tag requires a 'drawable' attribute or child tag defining a drawable
     出现这个错误,如果你找了很久也找不到错误的原因,那么可能就是下面的这一种.原因是在于:

                        W  Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <item> tag requires a 'drawable' attribute or chil
                           d tag defining a drawable
                        W      at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:178)
                        W      at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:921)
                        W      at android.graphics.drawable.Drawable.createFromXml(Drawable.java:858)
                        W      at android.content.res.Resources.loadDrawable(Resources.java:1946)
                        W      ... 36 more



可以看出来虽然我们的color/下的selector是color的selector但是其实也是StateListDrawable来实现的,所以,不能直接在上面写颜色值而是要引用颜色值



最后更新 2014-02-26

24 Can't upgrade read-only database from version 8 to 9

出现这个错误的时候是在getReadableDatabase()调用的时候:

错误抛出的地方在:android.database.sqlite.SQLiteOpenHelper.java:57#getDatabaseLocked

我的第一感觉就是,啊,这个的bug太容易出现了:

除非我重写getReadableDatabase,

比如我升级了数据库,在onUpgrade中有一些修改数据库结果的语句,

但是升级之后第一次进行数据库调用的是getReadableDatabase,这个时候,就会报不能从只读的数据库更新的异常了.

我们来看下Android数据库更新的事件代码:

            final int version = db.getVersion();
            if (version != mNewVersion) {
                if (db.isReadOnly()) {
                    throw new SQLiteException("Can't upgrade read-only database from version " +
                            db.getVersion() + " to " + mNewVersion + ": " + mName);
                }

                db.beginTransaction();
                try {
                    if (version == 0) {
                        onCreate(db);
                    } else {
                        if (version > mNewVersion) {
                            onDowngrade(db, version, mNewVersion);
                        } else {
                            onUpgrade(db, version, mNewVersion);
                        }
                    }
                    db.setVersion(mNewVersion);
                    db.setTransactionSuccessful();
                } finally {
                    db.endTransaction();
                }
            }



所以我想出来的解决办法就是,如果在调用getReadableDatabase时,检查下异常,如果有异常的话返回Writable版本的Database,这样做有什么不好的地方呢?

    @Override
    public SQLiteDatabase getReadableDatabase() {
        try {
            return getReadableDatabase();
        } catch (SQLiteException e) {
            YoujiaLog.warn(e,e.getMessage(),"getReadableDatabase error");
            return getWritableDatabase();
        }
    }




© 著作权归作者所有

共有 人打赏支持
李海珍
粉丝 183
博文 59
码字总数 57009
作品 0
南宁
后端工程师
加载中

评论(1)

齐顶电
0
《老罗Android开发视频教程》老罗来交国庆的答卷了

  之前在博客园、开源中国、安卓巴士发表的《老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存》,计划出300集免费的、高质量的、全面的Android开发视频教程,得到了...

qixinghaitang
2012/10/09
0
2
Android基于XMPP Smack Openfire下学习开发IM

http://blog.csdn.net/h7870181/article/details/8653865 Android基于XMPP Smack Openfire下学习开发IM(一)实现用户注册、登录、修改密码和注销等 http://blog.csdn.net/h7870181/article/de......

天下杰论
2014/07/17
0
1
使用Fantom语言开发Android应用

本文介绍使用Fantom开发Android应用的方法。如果你对Fantom语言不太了解,这里有一份不错的中文Fantom介绍(文中把pod翻译为容器,不要被误导)。 我之前做了一个Android Demo App来说明使用...

chunquedong
2015/08/22
0
0
android沉浸状态栏实现、地图多线路规划、Retrofit+RxJava+Jsoup+Mvp模式资讯类App等源码

Android精选源码 Android各种沉浸式状态栏实现源码(http://www.apkbus.com/thread-598927-1-1.html) Android自定义View实现炫酷的星期日期选择控件源码(http://www.apkbus.com/thread-59893...

逆鳞龙
05/08
0
0
【转】 Android开发手记一 NDK编程实例

Android 开发手记一 ---- NDK 编程实例 在 Android 上,应用程序的开发,大部分基于 Java 语言来实现。要使用 c 或是 c++ 的程序或库,就需要使用 NDK来实现。 NDK 是 Native Development K...

尼莫
2012/07/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

hive分桶

hive为啥分桶? 更加细粒度的划分数据,既可以使用分桶技术实现。 作用 对数据进行抽样查询,较为高效。 可以使查询效率提高。 hive分桶技术 分桶字段是表内字段,默认是对分桶的字段进行has...

Mr_yul
6分钟前
0
0
SQL中的case when then else end用法

Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女'ELSE '其他' END--Case搜索函数CASE WHEN sex...

牛奋Debug
26分钟前
0
0
log4j2发送消息至Kafka

title: 自定义log4j2发送日志到Kafka tags: log4j2,kafka 为了给公司的大数据平台提供各项目组的日志,而又使各项目组在改动上无感知。做了一番调研后才发现log4j2默认有支持将日志发送到kaf...

微笑向暖wx
35分钟前
1
0
LINUX中如何查看某个端口是否被占用(转发)

LINUX中如何查看某个端口是否被占用 之前查询端口是否被占用一直搞不明白,问了好多人,终于搞懂了,现在总结下: 1.netstat -anp |grep 端口号 如下,我以3306为例,netstat -anp |grep 33...

覃大光
今天
1
0
JBolt 1.5.0新版发布,升级到支持最新版JFinal和Jetty,实现了在线更新插件功能

JBolt是一个JFinal极速开发框架 定制版IDE插件 目前仅有Eclipse插件版,Idea插件版正在开发中。 JBolt的详细使用教程请移步到这里 =====版本1.5.0 更新内容 2018年10月13日10:41:52===== 注意...

山东-小木
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部