28: Caused by: java.lang.ClassCastException: com.xiyili.youjia.ui.start.StartGaFragment cannot be cast to android.app.Fragmentjava
在使用Support Library库中的Fragment中时,若是使用是否是FragmentActivity的话就会报上面的错.改用FragmentActivity就OK了.android
27: 在使用AppCompat的PopupMenu时出现了以下的错误: java.lang.RuntimeException: Binary XML file line #17: You must supply a layout_height attribute.sql
这是由于PopupMenu是以PopupWindow来显示的,全部须要使用Activity的Context数据库
26: Caused by: java.lang.IllegalArgumentException: Can only use lower 16 bits for requestCodeapp
startActivityForResult参数的requestCode不能太大了,因此不能超过2的16次方ide
25: <item> tag requires a 'drawable' attribute or child tag defining a drawable
出现这个错误,若是你找了好久也找不到错误的缘由,那么可能就是下面的这一种.缘由是在于:
ui
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来实现的,因此,不能直接在上面写颜色值而是要引用颜色值spa
最后更新 2014-02-26code
24 Can't upgrade read-only database from version 8 to 9orm
出现这个错误的时候是在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(); } }