SimpleDateFormat Сбой в Android - PullRequest
       4

SimpleDateFormat Сбой в Android

0 голосов
/ 10 октября 2010

Мне удалось это исправить, но мне интересно, смогу ли я получить хорошее объяснение, почему это было сломано.

Я создал служебную функцию для обработки моих преобразований дат с базой данных для приложения для Android. Этот код не удался во второй раз, когда к нему обращались:

public class Util {

  private static final ParsePosition pos = new ParsePosition(0);

public static String isoDateFormat(Date d) {
      SimpleDateFormat databaseformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      return databaseformat.format(d);
  }

  public static Date isoToDate(String isodate) {
      SimpleDateFormat databaseformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
      return databaseformat.parse(isodate, pos);
  } 
}

Я понимаю, что различные функции SimpleDateFormat не являются поточно-ориентированными, но (насколько я знаю) моя программа работала в одном потоке. Я новичок в Android и, возможно, я ошибаюсь. Я знаю, что мне удалось это исправить, переместив ParsePosition в методы и обновив его. Даже если это не потокобезопасно, разве это не просто константа? Почему константа только для чтения прерывает поток?

Спасибо!

РЕДАКТИРОВАТЬ: Вот трассировка стека:

E/AndroidRuntime( 2753): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mobile/com.example.mobile.ExampleSelector}: java.lang.NullPointerException
E/AndroidRuntime( 2753):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
E/AndroidRuntime( 2753):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime( 2753):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime( 2753):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime( 2753):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 2753):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 2753):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 2753):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 2753):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 2753):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 2753):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 2753):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 2753): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 2753):    at Util.isoToDate(Util.java:34)

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

Оказывается, именно ParsePosition вызывал проблемы. Каждый раз, решая проблему, решал вопрос.

0 голосов
/ 10 октября 2010

В isoToDate убедитесь, что isodate не равен нулю.Что-то вроде:

public static Date isoToDate(String isodate) {
   if (isodate == null) {
      // Raise exception, or return default date
   }
}
...