2013-04-30 2 views
1

форматирования Это код, который является получение исключения нулевого указателя: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) 
+0

Какова ценность 'load' из' load.getDeliveryDate() '? Это нулевое значение? И если да, то почему вы вызываете функцию из нулевого класса? –

+0

опубликуйте свой logcat –

ответ

2

В соответствии с трассировкой стека вы опубликовали формат даты, но не дату (возможно).

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

Эта строка трассировки стека сообщает нам, что это была проблема с форматированием даты. Но это также говорит нам, что существует объект формата. Мы знаем, что объект был инициализирован строкой (а не нулевым указателем), а внутренние ошибки в таких библиотеках очень редкие.

Возможно, что-то не так с вызовом load.getDeliveryDate(), возвращающим null. Вы еще не опубликовали это, так что я не могу комментировать.

Вы описали в своем вопросе, что:

я первоначально получаю сообщение об ошибке на линии, которая устанавливает текст для моей даты пункта. Теперь я также получаю сообщение об ошибке в формате даты .

Поскольку это явно не может быть нулевым, похоже, что существует несоответствие между кодом, запущенным на вашем устройстве, и кодом, который вы используете в своей среде IDE (Eclipse?).

Это может случиться время от времени. По какой-то причине приложение не обновляется с новой версией некоторых или всех ваших классов. Когда вы получите какое-либо доказательство, что это произошло (, который вы показываете), лучше всего полностью удалить приложение и выполнить полный проект. Когда вы попытаетесь запустить приложение после этого, он вытолкнет на устройство полную чистую копию, что облегчит отладку.

+0

По какой-то причине load.getDeliveryDate() возвращает null. Я поставил чек и напомнил, что работает randomDate(). –

-1

новой Дата (интермедиат года, месяц INT, INT дня) является устаревшим. Вы можете использовать григорианский календарь вместо

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); 
Смежные вопросы