FATAL EXCEPTION: ……
java.lang.RuntimeException: Unable to start activity ComponentInfo……
ava.lang.NullPointerException: Attempt to invoke virtual method 'android……on a null object reference
介紹:
我在寫項目的時候,遇到了button等控件出現on a null object reference ,在網上找了很久沒找到解決辦法。最后還是自己發現了問題的來源,又自己改正了。具體形式如上。
問題出現的情況:
布局有該,並且在java代碼中也有 findViewById語句, 但是調試的時候還是出了on a null object reference錯誤。
問題出現的原因:
在安卓開發的時候,遇到類似的布局以及實現的方法的時候,我們就習慣直接復制。
一般來說,不同布局中設置id為同名的時候,是不會報錯的。但是復制的情況特殊,雖然把setsetContentView(R.layout.xxx)中xxx的名字修改了,但是findViewById中的ID卻沒有改變。也就是說還是源布局(也就是被復制的那個布局)里的ID。
有什么證據呢?
鼠標左鍵停止findViewById(R.id.yyy)中的yyy上,比較復制的java文件和源java文件,會發現他們的ID是一樣的。
解決辦法:
原因找到了,解決辦法就呼之欲出了。
我的做法是把第二個布局里的控件名字全改了(加了個前綴)。這個時候,會發現java代碼不會報錯。但是findViewById里的內容也要改。
感覺這樣改正還是挺麻煩的,期待有更好的辦法。