J'ai été en mesure de résoudre ce problème, mais je me demande si je peux obtenir une bonne explication de pourquoi cela a été brisé.SimpleDateFormat À défaut d'Android
J'ai créé une fonction utilitaire 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 j'ai été capable de résoudre ce problème en déplaçant la ParsePosition dans les méthodes et en la remplissant. Même si ce n'est pas sûr, n'est-ce pas une constante? Pourquoi une constante en lecture seule casse un thread?
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)
Je devrais probablement mentionner que je suis assez nouveau à java, donc je pourrais juste faire quelque chose de stupide. ;-) – SapphireSun
Pourriez-vous poster votre stacktrace? il est tout à fait possible que vos données aient été mutilées ... – st0le
J'ai ajouté la trace. L'exception NullPointerException correspond à l'appel à databaseformat.parse. – SapphireSun