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