相信很多新手像我一樣,在寫android程式時總會遇到這種錯誤,然後就是焦頭爛額,不知所措,尤其是檢查完所有代碼,發現還是不知道怎麼回事啊!當然,這與我抓錯能力不足的問題有關。 我在這裡,無非就是想要總結一下我最近遇到的有關於NullPointer這個錯誤的幾種情況(因為本人實在是太過於粗心,所以犯的錯誤類型是多種多樣),唉,新手總是各種“歡樂多”啊!在正式總結前,必須強調,這篇文章只是一個記錄而已,它裡面並沒有包含所有可能出現問題的情況,只是記錄我的情況而已,所以並不全面,如果有讀者看完後發現與自己的情況不符,那麼抱歉,你可以將你的情況告訴我,我們一起共同探討。
好了,接下來就是本文了。
首先,我必須先說明一種很常見的情況,就是你必須仔仔細細的檢查你的組件有沒有聲明好,如果有聲明,但是還是沒有找到,說明,程式並沒有找到你的組件所在的layout,那麼,這時,你就要注意了,你是否有在前面的代碼中inflater過你的layout,如果有,請正確註明,你的id是在這個layout上,如:spinner = (Spinner)layout.findViewById(R.id.spinner),這樣,程式才能正確找到你的組件。還有一個問題,其實這就是編程時的不小心了,比如說,你明明是想要將你的組件都放在一個你inflater過的layout上,就是你自己已經安排好一個layout,但是,因為習慣,你會在你的代碼前面添加或者因為eclipse(如果你是用eclipse)自動添加setContentView(R.layout.main),就會出現這個錯誤,因為有兩個layout,但是main並沒有用到,就會因為其中main是空的而報錯。這個錯誤我在一次實踐中遇到,那真的是令我感到肝腸寸斷,直到我在一次無奈(因為我已經檢查過很多次了!)的檢查中發現這個問題。還有一 個問題,就是當你想要在一個layout上添加一個view時,你是必須要為這個view再設定一個layout的,因為這其實就是層的疊加,但是很可能你的布局檔案並沒有注意到這點,所以依然會報錯。這個問題我因為新手,試著自己從頭寫android程式,結果我沒有這麼做,於是,我又悲劇了。。。。。(有關於布局檔案的檢查,後來發現,其實是可以預先看一下預覽圖了,因為sdk是可以這麼做的,如果上面沒有正確顯示本應出現的樣子,那麼,你的布局檔案絕對有問題)
然後,在你檢查完所有的組件都有聲明並且都有可找到的id,layout沒有問題,布局檔案也沒事,那麼,你就要檢查一下你的邏輯了,尤其是迴圈。迴圈中很容易出現的問題就是,可能會出現空賦值。你要仔細檢查一下,你的變數,包括臨時變數有沒有出現空賦值的現象,或者你本想在迴圈中賦值,但是後來你發現根本不需要然後忘記將這個臨時變數去掉,就會出現問題。這個問題的產生其實就是我們的編程素養有點低的問題(是的,老實承認自己的素養低是件好事,不要因為自己做過什麼什麼東東就認為自己已經很高了,關鍵還是你的東東還是怎麼乾的先),我們可能想要在迴圈中給數組元素賦值,而這個過程可能先要聲明一個臨時變數,再賦給數組元素,這時,就要想清楚,如果這個臨時變數真的就是一個儲存的地方,沒啥意義,並不需要它在每次迴圈開始前就要儲存前一次迴圈的值,那麼,請放在迴圈中,而不是聲明在外面,因為這樣就會出現上面我說的情況,你聲明了一個空賦值的臨時變數。所以,老老實實檢查自己所聲明過的變數,看看是否會出現空賦值的情況是很重要的!
以上的情況就是我所遇到的,後面如果遇到其他的情況或者有人跟我反映他所遇到的新情況,那麼,我就會繼續補充這篇文章。好了,就先這樣了,希望能夠幫到一些也像我一樣在迷惘中痛苦掙紮的新手。