问题分析:
试图对一个为null的对象执行成员函数、试图获取null对象的成员变量、试图获取null数组的长度、试图访问数组中某个空对象、抛出一个对象而实际未初始化为null时,此时会抛出NullPointerException异常。
解决方案:对可以预见为空的对象进行处理,对不可预知的对象判断是否是null,然后再访问内部成员变量或执行成员函数。
代码示例:
示例1:[backcolor=transparent] [backcolor=transparent]Exception[backcolor=transparent] [backcolor=transparent]in[backcolor=transparent] thread [backcolor=transparent]"main"[backcolor=transparent] java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]NullPointerException
解决方案:判断对象是否为null,不是null再执行对象成员函数。
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]String[backcolor=transparent][][backcolor=transparent] split[backcolor=transparent]([backcolor=transparent]String[backcolor=transparent] content[backcolor=transparent]){
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent]([backcolor=transparent]content[backcolor=transparent]!=[backcolor=transparent]null[backcolor=transparent]){
- [backcolor=transparent] [backcolor=transparent]String[backcolor=transparent][][backcolor=transparent] result[backcolor=transparent]=[backcolor=transparent]content[backcolor=transparent].[backcolor=transparent]split[backcolor=transparent]([backcolor=transparent]"\\s+"[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]return[backcolor=transparent] result[backcolor=transparent];
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]return[backcolor=transparent] [backcolor=transparent]null[backcolor=transparent];
- [backcolor=transparent]}
示例2:[backcolor=transparent]java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]NullPointerException- [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]webkit[backcolor=transparent].[backcolor=transparent]WebViewClassic$WebViewInputConnection[backcolor=transparent].[backcolor=transparent]setNewText[backcolor=transparent]([backcolor=transparent]WebViewClassic[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]587[backcolor=transparent])
- [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]webkit[backcolor=transparent].[backcolor=transparent]WebViewClassic$WebViewInputConnection[backcolor=transparent].[backcolor=transparent]setComposingText[backcolor=transparent]([backcolor=transparent]WebViewClassic[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]327[backcolor=transparent])
- [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]webkit[backcolor=transparent].[backcolor=transparent]WebViewClassic$WebViewInputConnection[backcolor=transparent].[backcolor=transparent]commitText[backcolor=transparent]([backcolor=transparent]WebViewClassic[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]343[backcolor=transparent])
- [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]IInputConnectionWrapper[backcolor=transparent].[backcolor=transparent]executeMessage[backcolor=transparent]([backcolor=transparent]IInputConnectionWrapper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]279[backcolor=transparent])
- [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]view[backcolor=transparent].[backcolor=transparent]IInputConnectionWrapper$MyHandler[backcolor=transparent].[backcolor=transparent]handleMessage[backcolor=transparent]([backcolor=transparent]IInputConnectionWrapper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]77[backcolor=transparent])
- [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]Handler[backcolor=transparent].[backcolor=transparent]dispatchMessage[backcolor=transparent]([backcolor=transparent]Handler[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]107[backcolor=transparent])
- [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]Looper[backcolor=transparent].[backcolor=transparent]loop[backcolor=transparent]([backcolor=transparent]Looper[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]194[backcolor=transparent])
- [backcolor=transparent] at android[backcolor=transparent].[backcolor=transparent]app[backcolor=transparent].[backcolor=transparent]ActivityThread[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]ActivityThread[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]5391[backcolor=transparent])
- [backcolor=transparent] at java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]reflect[backcolor=transparent].[backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]invokeNative[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])
- [backcolor=transparent] at java[backcolor=transparent].[backcolor=transparent]lang[backcolor=transparent].[backcolor=transparent]reflect[backcolor=transparent].[backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]invoke[backcolor=transparent]([backcolor=transparent]Method[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]525[backcolor=transparent])
- [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]ZygoteInit$MethodAndArgsCaller[backcolor=transparent].[backcolor=transparent]run[backcolor=transparent]([backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]833[backcolor=transparent])
- [backcolor=transparent] at com[backcolor=transparent].[backcolor=transparent]android[backcolor=transparent].[backcolor=transparent]internal[backcolor=transparent].[backcolor=transparent]os[backcolor=transparent].[backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]ZygoteInit[backcolor=transparent].[backcolor=transparent]java[backcolor=transparent]:[backcolor=transparent]600[backcolor=transparent])
- [backcolor=transparent] at dalvik[backcolor=transparent].[backcolor=transparent]system[backcolor=transparent].[backcolor=transparent]NativeStart[backcolor=transparent].[backcolor=transparent]main[backcolor=transparent]([backcolor=transparent]Native[backcolor=transparent] [backcolor=transparent]Method[backcolor=transparent])
在使用Google Play Services的google-play-services.jar时报错,建议设置全局Exception Handler。
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]MyApplication[backcolor=transparent] [backcolor=transparent]extends[backcolor=transparent] [backcolor=transparent]Application[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]@Override
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onCreate[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]super[backcolor=transparent].[backcolor=transparent]onCreate[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]Thread[backcolor=transparent].[backcolor=transparent]setDefaultUncaughtExceptionHandler[backcolor=transparent]([backcolor=transparent]new[backcolor=transparent] [backcolor=transparent]Thread[backcolor=transparent].[backcolor=transparent]UncaughtExceptionHandler[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]@Override
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] uncaughtException[backcolor=transparent]([backcolor=transparent]Thread[backcolor=transparent] thread[backcolor=transparent],[backcolor=transparent] [backcolor=transparent]final[backcolor=transparent] [backcolor=transparent]Throwable[backcolor=transparent] ex[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]// Custom code here to handle the error.
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]});
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent]}
参考文献:
https://docs.oracle.com/javase/7/docs/api/java/lang/NullPointerException.html
http://stackoverflow.com/questions/21866459/android-nullpointerexception-on-webview
https://groups.google.com/forum/#!topic/google-admob-ads-sdk/QvUhH5ZGIHQ
http://stackoverflow.com/questions/18824076/how-to-catch-this-exception-in-android-webview“