java - joda - Solo algunos usuarios informan sobre el error "No se encontró el recurso". ¿Esto tiene sentido?
jodatime current time (3)
Estoy viendo un par de errores en Crittercism (Servicio de informes de accidentes) para mi aplicación de Android publicada. La traza es la siguiente:
0 java.io.IOException: Resource not found: "org/joda/time/tz/data/ZoneInfoMap" ClassLoader: dalvik.system.PathClassLoader@45908320
1 at org.joda.time.tz.ZoneInfoProvider.openResource(ZoneInfoProvider.java:211)
2 at org.joda.time.tz.ZoneInfoProvider.<init>(ZoneInfoProvider.java:123)
3 at org.joda.time.tz.ZoneInfoProvider.<init>(ZoneInfoProvider.java:82)
4 at org.joda.time.DateTimeZone.getDefaultProvider(DateTimeZone.java:462)
5 at org.joda.time.DateTimeZone.setProvider0(DateTimeZone.java:416)
6 at org.joda.time.DateTimeZone.<clinit>(DateTimeZone.java:115)
7 at org.joda.time.chrono.GregorianChronology.<clinit>(GregorianChronology.java:71)
8 at org.joda.time.chrono.ISOChronology.<clinit>(ISOChronology.java:66)
9 at org.joda.time.base.BaseDateTime.<init>(BaseDateTime.java:61)
10 at org.joda.time.DateTime.<init>(DateTime.java:155)
La búsqueda muestra que esto suele ser un problema de compilación (por lo general, la biblioteca de Joda Time no se agregó a la ruta de compilación o algo así), pero ¿por qué solo unos 4 usuarios de un par de miles ven este error?
Mi única suposición es que alguien está tratando de descompilar la aplicación para piratearla (es una aplicación de pago bastante popular), y ve este error cuando se vuelve a compilar incorrectamente. En ese caso, me alegra que estén viendo errores y no necesito preocuparme por esto.
La otra cosa extraña es que el código que causa el problema estaba rodeado por un try / catch, que no parecía captarlo:
try {
DateTime dt = new DateTime();
DateTimeFormatter fmt = ISODateTimeFormat.dateTime();
return fmt.print(dt);
} catch (Exception e) {
//Report issue to Analytics service
}
Lo cual para mí, parece aún más improbable que este error aparezca en Crittercism, ya que debería haber sido atrapado. ¿Alguien puede explicar esto?
Esto puede suceder en caso de que pierda la inicialización:
JodaTimeAndroid.init(this);
He tenido el mismo problema y después de buscar mucho en google me di cuenta. El archivo ZoneInfoMap se crea ejecutando jodaTime (ZoneInfoCompiler) con los argumentos:
-dst src/org/joda/time/tz/data src/org/joda/time/tz/src/africa
src/org/joda/time/tz/src/antarctica src/org/joda/time/tz/src/asia
src/org/joda/time/tz/src/australasia src/org/joda/time/tz/src/backward
src/org/joda/time/tz/src/etcetera src/org/joda/time/tz/src/europe
src/org/joda/time/tz/src/northamerica src/org/joda/time/tz/src/pacificnew
src/org/joda/time/tz/src/southamerica src/org/joda/time/tz/src/systemv
Esto agregará toda la zona horaria al jodaTimer, puede crear más áreas de zona horaria. Creo que si también sabe cómo hacerlo, y no tiene que incluirlas todas si no las necesita todas.
por qué se bloquea con ese error es porque está buscando un archivo que no está allí. ¿No estoy seguro de por qué intentar capturar no funciona, pero sospecho que tiene algo que ver con el hecho de que jodaTimer es una biblioteca JAR (la mía era al menos)?
No estoy seguro si esta es la forma en que debe hacerse o si hay una solución mejor, pero eso es lo que hice y funciona perfectamente para mí ahora.
las referencias que me ayudaron a llegar a esta conclusión: http://joda-interest.219941.n2.nabble.com/How-to-run-Joda-time-s-test-Resource-Not-Found-exception-td5913668.html problem
Espero que esto ayude.
Veo informes similares e infrecuentes de una popular aplicación gratuita. No lo he reproducido hasta ahora. Hay various references a este problem distribuidas por la web, no todas relacionadas con Android.
Una pista: el ZoneInfoMap es un archivo de recursos en el jar original, no en una clase. Por lo tanto, si alguno de los diversos mercados de aplicaciones eliminaba la información que no pertenece a la clase (p. Ej., Se desbloquea y se vuelve a abrir), ZoneInfoMap sería un candidato. Del mismo modo, si cualquier utilidad del cargador de clases tuviera un problema, por seguridad o estupidez, con recursos que no sean de clase, ZoneInfoMap sería un candidato.
Otro ángulo: ¿podría el entorno de tiempo de ejecución problemático tener su propio jar de joda-time anteriormente en el classpath, uno que carece de / data / segment?
En pocas palabras: parece que este es otro ejemplo del Salvaje Oeste de Android, uno que he aprendido a ignorar hasta que pueda encontrar una reprografía.