使用SimpleDateFormat格式化日期时出现NullPointerException

时间:2013-04-30 16:33:56

标签: android nullpointerexception simpledateformat

这是获取空指针异常的代码:

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)

2 个答案:

答案 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);