android java 指针异常处理,Android程序员日常开发中异常总结
CaptainAndroid.png
Java異常
平時(shí)開發(fā)中遇到的java異常很多,因?yàn)橐鹪蛞荒苛巳?#xff0c;當(dāng)然也有不好解決的,比如一個(gè)簡(jiǎn)單的空指針異常你可能始終無法找到其為空的原因,甚至使用前還做了空判斷。也有可能一個(gè)類型強(qiáng)制轉(zhuǎn)換異常被報(bào)了出來可是你始終無法找到為什么出錯(cuò)的原因。偶先幾率極低,只能catch的來了事。
NullPointerException空指針引用異常
ClassCastException 類型強(qiáng)制轉(zhuǎn)換異常
IllegalArgumentException 傳遞非法參數(shù)異常
ArithmeticException 算術(shù)運(yùn)算異常
ArrayStoreException 向數(shù)組中存放與聲明類型不兼容對(duì)象異常
IndexOutOfBoundsException 下標(biāo)越界異常
NegativeArraySizeException 創(chuàng)建一個(gè)大小為負(fù)數(shù)的數(shù)組錯(cuò)誤異常
umberFormatException 數(shù)字格式異常
SecurityException 安全異常
10.UnsupportedOperationException 不支持的操作異常
CSDN上更多的java異常
Android自身特性異常
java.lang.NullPointerException
異常原因:另一種情況使用fragment時(shí),fragment相關(guān)布局,必須給每個(gè)view設(shè)置id,否則通過activity獲得fragment的實(shí)例時(shí)會(huì)出現(xiàn)以上異常
解決方法:為fragment布局的每個(gè)view設(shè)置ID
Android中引入第三方Jar包的方法(Java.lang.NoClassDefFoundError解決辦法)
1、在工程下新建lib文件夾,將需要的第三方包拷貝進(jìn)來。
2、將引用的第三方包,添加進(jìn)工作的build path。選中jar包->Build Path
3、(關(guān)鍵的一步)將lib設(shè)為源文件夾。如果不設(shè)置,則程序編譯可以通過,但運(yùn)行的時(shí)候,會(huì)報(bào):選中l(wèi)ib文件夾->source code
java.lang.NoClassDefFoundError
Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解決辦法)
Caused by: android.os.TransactionTooLargeException
導(dǎo)致原因是:Binder傳輸?shù)臄?shù)據(jù)太大
如果Binder的參數(shù)或返回值太大,不適合的事務(wù)緩沖區(qū),然后調(diào)用將失敗,并將被拋出TransactionTooLargeException。
解決方法:
不要將大量數(shù)據(jù)傳入Binder
android.database.CursorWindowAllocationException:Cursor window allocation of 2048 kb failed
導(dǎo)致原因:主要原因是因?yàn)槭褂昧薙impleCursorAdapter類,其中的Cursor參數(shù)需要我們手動(dòng)關(guān)閉,否則就會(huì)出現(xiàn)以上異常。
解決方法:cursor.close()
Excessive JNI global references錯(cuò)誤的解決方案 GREF暴增
導(dǎo)致原因:vm對(duì)jni層的reference有個(gè)數(shù)限制,過多很造成VM aborting。因此每次在GREF增加到2000以上的時(shí)候就直接aborting了
解決方法:及時(shí)回收或關(guān)閉引用
android.view.WindowManager$BadTokenException: Unable to add window -- token
導(dǎo)致原因:使用getApplicationContext()獲得的Context,而必須使用Activity,因?yàn)橹挥幸粋€(gè)Activity才能添加一個(gè)窗體。
解決方法:采用當(dāng)前Activity的Context
android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file
導(dǎo)致原因:重復(fù)安裝軟件,導(dǎo)致Sqlite3打開數(shù)據(jù)庫(kù)異常
解決方法:卸載相應(yīng)軟件,開關(guān)機(jī),重新安裝該軟件,即可以解決相關(guān)異常。
java.util.ConcurrentModificationException(并發(fā)操作異常)
異常原因:ArrayList是非線程安全的,當(dāng)同時(shí)在遍歷和修改ArrayList時(shí),就會(huì)出現(xiàn)該異常
解決方法:使用Vector替換ArrayList,Vector是線程安全的。Vector的缺點(diǎn):大量數(shù)據(jù)操作時(shí),由于線程安全,性能比ArrayList低
so庫(kù)文件異常(JNI層異常)
異常原因:在Android應(yīng)用層開發(fā)中,我們經(jīng)常會(huì)使用so庫(kù)文件。當(dāng)so庫(kù)文件發(fā)生異常時(shí),我們只能在adb log中發(fā)現(xiàn)fatal libc這樣的異常信息,僅此而已,并不能發(fā)現(xiàn)異常調(diào)用的邏輯關(guān)系, 這是我們就需要查看so 庫(kù)異常Log信息。在Android手機(jī)的/data/tombstones 的路徑下就包含了so庫(kù)文件發(fā)生異常的Log信息,開發(fā)者可以查看該路徑下載Log文件發(fā)現(xiàn)異常調(diào)用的邏輯關(guān)系。
謝謝大家閱讀,如有幫助,來個(gè)喜歡或者關(guān)注吧!
本文作者:Anderson/Jerey_Jobs
總結(jié)
以上是生活随笔為你收集整理的android java 指针异常处理,Android程序员日常开发中异常总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sja1000 c语言,调试好的can(
- 下一篇: Android避坑指南,Gson与Kot