在项目中的一处有如下的代码片段:
ArrayList<SmsInfo> infos = SmsPicker.getInstance(this).getSmsInfo();
System.out.println("infos.size()--->" + infos.size());
for(SmsInfo info:infos) {
System.out.println(info.getName());
}
运行后出现以下异常:
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): Caused by: java.lang.NullPointerException
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at com.android.internal.os.LoggingPrintStream.println(LoggingPrintStream.java:298)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at com.weining.view.activity.SMSBakActivity.initLv(SMSBakActivity.java:69)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at com.weining.view.activity.SMSBakActivity.onCreate(SMSBakActivity.java:35)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)我是通过Sysout来打印调试消息的,找来找去发现for遍历中info.getName()的为null,好,我猜问题出在System.out.println()方法中,让我不解的是在之前做的java项目中,Sysout输出对象时,即使对象为空,也可以输出对象为null,而android项目中竟然报空指针异常了!
后来我加以验证,写了两行代码:
String str = null;
System.out.println(str);
运行在两个不同的工程中,一个是最普通的java工程中的main方法中,好,正常输出null,而在另一个android工程中,就报空指针异常了!
问题来了,它们都用的是java源码:
294 @Override
295 public synchronized void println(String s) {
296 if (builder.length() == 0) {
297 // Optimization for a simple println.
298 int length = s.length();
299
300 int start = 0;
原来这段代码没有判断s是否为空指针而直接取length了,但我不解的是在普通的java工程中为何不会报空指针异常而直接输出null呢?
ArrayList<SmsInfo> infos = SmsPicker.getInstance(this).getSmsInfo();
System.out.println("infos.size()--->" + infos.size());
for(SmsInfo info:infos) {
System.out.println(info.getName());
}
运行后出现以下异常:
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): Caused by: java.lang.NullPointerException
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at com.android.internal.os.LoggingPrintStream.println(LoggingPrintStream.java:298)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at com.weining.view.activity.SMSBakActivity.initLv(SMSBakActivity.java:69)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at com.weining.view.activity.SMSBakActivity.onCreate(SMSBakActivity.java:35)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-24 02:16:58.780: ERROR/AndroidRuntime(2249): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)我是通过Sysout来打印调试消息的,找来找去发现for遍历中info.getName()的为null,好,我猜问题出在System.out.println()方法中,让我不解的是在之前做的java项目中,Sysout输出对象时,即使对象为空,也可以输出对象为null,而android项目中竟然报空指针异常了!
后来我加以验证,写了两行代码:
String str = null;
System.out.println(str);
运行在两个不同的工程中,一个是最普通的java工程中的main方法中,好,正常输出null,而在另一个android工程中,就报空指针异常了!
问题来了,它们都用的是java源码:
294 @Override
295 public synchronized void println(String s) {
296 if (builder.length() == 0) {
297 // Optimization for a simple println.
298 int length = s.length();
299
300 int start = 0;
原来这段代码没有判断s是否为空指针而直接取length了,但我不解的是在普通的java工程中为何不会报空指针异常而直接输出null呢?
解决方案 »
- 新手问题. 在Android中, 有人能JDBC直接连接到SQL SERVER取数据吗?
- 点击imageView 更换成另外一张图片
- 求助:对ContenPRovider的数据库进行删除一条信息
- 既然service跟Ui线程在同一个线程,那为什么在service播放音乐的时候不会阻塞UI线程呢
- mBase.getSharedPreferences(name, mode)到底调用实体在哪?
- android小问题,急求!
- ImageView 何时可以提取 Bitmap
- 想实现一个功能,求思路
- 问new一个对象数组的问题?
- 新建android出现很多错误啊,刚学不久,求帮忙
- Android UDP 无法receive到数据
- android下opengl使用问题
还有,提醒你一下,最好不要用foreach,经常出问题,有时候只是简单的换成for就好了...