关于android上的NullPointer错误

     相信很多新手像我一样,在写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没有问题,布局文件也没事,那么,你就要检查一下你的逻辑了,尤其是循环。循环中很容易出现的问题就是,可能会出现空赋值。你要仔细检查一下,你的变量,包括临时变量有没有出现空赋值的现象,或者你本想在循环中赋值,但是后来你发现根本不需要然后忘记将这个临时变量去掉,就会出现问题。这个问题的产生其实就是我们的编程素养有点低的问题(是的,老实承认自己的素养低是件好事,不要因为自己做过什么什么东东就认为自己已经很高了,关键还是你的东东还是怎么干的先),我们可能想要在循环中给数组元素赋值,而这个过程可能先要声明一个临时变量,再赋给数组元素,这时,就要想清楚,如果这个临时变量真的就是一个存储的地方,没啥意义,并不需要它在每次循环开始前就要保存前一次循环的值,那么,请放在循环中,而不是声明在外面,因为这样就会出现上面我说的情况,你声明了一个空赋值的临时变量。所以,老老实实检查自己所声明过的变量,看看是否会出现空赋值的情况是很重要的!

      以上的情况就是我所遇到的,后面如果遇到其他的情况或者有人跟我反映他所遇到的新情况,那么,我就会继续补充这篇文章。好了,就先这样了,希望能够帮到一些也像我一样在迷惘中痛苦挣扎的新手。

原文地址:https://www.cnblogs.com/wenjiang/p/2679304.html