这是获取空指针异常的代码:
SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy");
String temp = df.format(load.getDeliveryDate());
System.out.println(temp);
date.setText(temp);
这是我创建随机日期的代码(对于测试数据):
private Date randomDate(){
int month, year, day;
Random call = new Random();
month = call.nextInt(12);
year = call.nextInt(2012);
day = call.nextInt(31);
Date toReturn = new Date(year, month, day);
System.out.println(toReturn.toString());
return toReturn;
}
我最初在设置日期项目文本的行上收到错误。现在我的日期格式声明行也出错了。
我已经在检查加载以确保它不为空。它是一个包含Date属性的自定义类。
Logcat输出(重建后):
04-30 12:56:10.423: E/AndroidRuntime(8212): FATAL EXCEPTION: main
04-30 12:56:10.423: E/AndroidRuntime(8212): java.lang.NullPointerException
04-30 12:56:10.423: E/AndroidRuntime(8212): at java.util.Calendar.setTime(Calendar.java:1325)
04-30 12:56:10.423: E/AndroidRuntime(8212): at java.text.SimpleDateFormat.formatImpl(SimpleDateFormat.java:536)
04-30 12:56:10.423: E/AndroidRuntime(8212): at java.text.SimpleDateFormat.format(SimpleDateFormat.java:818)
04-30 12:56:10.423: E/AndroidRuntime(8212): at java.text.DateFormat.format(DateFormat.java:376)
答案 0 :(得分:2)
根据您发布的堆栈跟踪,日期格式不为空,但日期(可能)为。
04-30 12:56:10.423: E/AndroidRuntime(8212): at java.text.DateFormat.format(DateFormat.java:376)
堆栈跟踪的这一行告诉我们这是格式化日期的问题。但它也告诉我们格式对象存在。我们知道对象是用字符串初始化的(不是空指针),这些库中的内部错误非常罕见。
因此load.getDeliveryDate()
调用返回null
日期可能会出现问题。你还没有发布这个,所以我不能发表评论。
您在问题中描述:
我最初在设置文本的行上收到错误 为我的日期项目。现在我的日期格式也出错了 申报行。
由于这显然不能为空,因此设备上运行的代码与您在IDE中运行的代码(Eclipse?)之间似乎不匹配。
这可能会不时发生。由于某种原因,应用程序无法使用部分或全部类的新版本进行更新。当你得到任何证据时(你似乎),最好的办法就是完全卸载应用程序并完成一个完整的项目。当您尝试在此之后运行应用程序时,它会将完整的干净副本推送到设备上,这将使调试变得更加容易。
答案 1 :(得分:-1)
不推荐使用新日期(int year,int month,int day)。您可以使用格里高利历来代替
public static void main(String[] args) {
SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy");
String temp = df.format(randomDate());
System.out.println(temp);
}
private static Date randomDate(){
int month, year, day;
Random call = new Random();
month = call.nextInt(11); // month -> 0 to 11 for gregorian calendar
year = call.nextInt(2012);
day = call.nextInt(31);
GregorianCalendar cal = new GregorianCalendar();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.DAY_OF_MONTH, day);
cal.set(Calendar.MONTH, month);
Date toReturn = cal.getTime();
System.out.println(toReturn.toString());
return toReturn;
}
如果出现NullPointerException,则该字段必须为null。只需使用
if(date != null)
date.setText(temp);