Android开发错误集(二)

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();
        }
    }




转载于:https://my.oschina.net/banxi/blog/262570

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值