Только некоторые пользователи сообщают об ошибке «Ресурс не найден». Имеет ли это смысл?

Я вижу пару ошибок в Crittercism (служба отчетов о сбоях) для моего опубликованного приложения для Android. Трассировка следующая:

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) 

Поиск показывает, что это обычно проблема компиляции (обычно, что библиотека времени Joda не была добавлена ​​в путь сборки или что-то в этом роде), но тогда почему только около 4 пользователей из пары тысяч увидели эту ошибку?

Мое единственное предположение: кто-то пытается декомпилировать приложение для его пиратства (его довольно популярное платное приложение) и видит эту ошибку, когда они неправильно перекомпилируются. В этом случае я рад, что они видят ошибки, и мне не нужно беспокоиться об этом.

Другая странная вещь заключается в том, что код, вызывающий проблему, был окружен try / catch, который, похоже, не поймал его:

  try { DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); return fmt.print(dt); } catch (Exception e) { //Report issue to Analytics service } 

Что мне кажется, кажется еще более маловероятным, что эта ошибка проявится на Crittercism, так как ее следовало поймать. Может ли кто-нибудь объяснить это?

Solutions Collecting From Web of "Только некоторые пользователи сообщают об ошибке «Ресурс не найден». Имеет ли это смысл?"

Это может произойти в случае, если вы пропустите инициализацию:

 JodaTimeAndroid.init(this); 

Я вижу похожие, нечастые сообщения из популярного бесплатного приложения. Я пока не воспроизвел его. Существуют различные ссылки на эту проблему, посыпанные вокруг Интернета, не все из которых связаны с Android.

Один ключ: ZoneInfoMap – это файл ресурсов в оригинальной банке, а не в классе. Поэтому, если какой-либо из рынков приложений ограничивает неклассическую информацию (например, unjar then re-jar), ZoneInfoMap будет кандидатом. Аналогично, если у любой утилиты classloader была проблема, для безопасности или глупости, с ресурсами неклассификации, ZoneInfoMap был бы кандидатом.

Другой угол: может ли проблемная среда выполнения иметь свой собственный joda-time jar раньше в пути к классам, который не имеет / data / segment?

Итог: похоже, это еще один пример Wild West Android, который я научился игнорировать, пока не смогу найти репродукцию.

У меня была такая же проблема, и после многого поиска в google я понял это. Файл ZoneInfoMap создается путем запуска jodaTime (ZoneInfoCompiler) с аргументами:

  -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 

Это добавит весь часовой пояс к jodaTimer, вы можете создать больше времени. Зоны, которые я считаю, если вы знаете, как это сделать, и вам не нужно включать их все, если вам не нужны все они.

Почему он падает с этой ошибкой, потому что он ищет файл, которого нет. Не уверен, почему именно попытка улова не работает, но я подозреваю, что это связано с тем, что jodaTimer – это библиотека JAR (по крайней мере, моя)?

Не уверен, что так оно и должно быть сделано, или если есть лучшее решение, но это то, что я сделал, и он отлично работает для меня сейчас.

Ссылки, которые помогли прийти к такому выводу: http://joda-interest.219941.n2.nabble.com/How-to-run-Joda-time-s-test-Resource-Not-Found-exception-td5913668.html http://sourceforge.net/p/joda-time/discussion/337835/thread/2798a578/

Надеюсь, это поможет.