1

This is the code that is getting the null pointer exception:

SimpleDateFormat df = new SimpleDateFormat("MMMM dd, yyyy");
String temp = df.format(load.getDeliveryDate());
System.out.println(temp);
date.setText(temp);

This is my code that creates a random date (for test data):

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;
}

I was originally getting an error on the line that is setting the text for my date item. Now I'm also getting an error on my date format declaration line.

I'm already checking load to make sure it is not null. It is a custom class that includes a Date attribute.

Logcat Output (after rebuild):

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)
4

2 回答 2

2

根据您发布的堆栈跟踪,日期格式不为空,但日期(可能)是。

04-30 12:56:10.423: E/AndroidRuntime(8212):     at java.text.DateFormat.format(DateFormat.java:376)

堆栈跟踪的这一行告诉我们这是格式化日期的问题。但它也告诉我们存在格式对象。我们知道该对象是用字符串(不是空指针)初始化的,并且此类库中的内部错误非常罕见

所以返回日期的load.getDeliveryDate()调用可能有问题。null你还没有发布这个,所以我真的不能评论。

您在问题中描述:

我最初在为我的日期项目设置文本的行上遇到错误。现在我的日期格式声明行也出现错误。

由于这显然不能为空,因此您的设备上运行的代码与您在 IDE(Eclipse?)中运行的代码之间似乎存在不匹配。

这可能不时发生。出于某种原因,应用程序没有使用您的部分或全部类的新版本进行更新。当您获得任何证据时(您似乎是这样),最好的办法是完全卸载该应用程序并进行完整的项目清理。之后,当您尝试运行该应用程序时,它会将完整的干净副本推送到设备上,这将使调试变得更加容易。

于 2013-04-30T17:01:17.970 回答
-1

不推荐使用 new Date(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,则该字段必须为空。只需使用

 if(date != null)
       date.setText(temp);
于 2013-04-30T16:46:59.357 回答