Подтвердить что ты не робот

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

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

0   java.io.IOException: Resource not found: "org/joda/time/tz/data/ZoneInfoMap" ClassLoader: [email protected]
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, так как ее следовало поймать. Кто-нибудь может это объяснить?

4b9b3361

Ответ 1

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

JodaTimeAndroid.init(this);

Ответ 2

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

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

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

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

Ответ 3

У меня была такая же проблема, и после многого поиска в 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, вы можете создать больше времени. Зоны, которые я считаю, если вы знаете, как это сделать, и вам не нужно включать их все, если вам не нужны все.

почему он падает с этой ошибкой, потому что он ищет файл, которого нет. Не уверен точно, почему попытка catch не работает, но я подозреваю, что это имеет какое-то отношение к тому, что 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/

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