Question

j'ai pu résoudre ce problème, mais je me demande si je peux obtenir une bonne explication pour savoir pourquoi cela a été cassé.

Je créé une fonction d'utilité pour gérer mes conversions de date avec la base de données pour une application Android. Ce code n'a pas la deuxième fois il a été consulté:

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

Je comprends que les différentes caractéristiques SimpleDateFormat sont pas thread-safe, mais (pour autant que je sache) mon programme était en cours d'exécution dans un seul fil. Je suis nouveau android et peut-être que je me trompe. Je sais que je suis en mesure de résoudre ce problème en déplaçant le ParsePosition dans les méthodes et Newing il. Même si elle est pas thread-safe, est-ce pas à peu près juste une constante? Pourquoi une lecture seule rupture constante d'un fil?

Merci!

EDIT: Voici le stacktrace:

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)
Était-ce utile?

La solution 2

Il se trouve qu'il était le ParsePosition qui était à l'origine des problèmes. Instancier chaque fois résolu le problème.

Autres conseils

Dans isoToDate, assurez-vous que ISODate est pas nul. Quelque chose comme:

public static Date isoToDate(String isodate) {
   if (isodate == null) {
      // Raise exception, or return default date
   }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top