Перекомпилировать йодатиму?

Это мой первый раз, используя jodatime, и у меня есть ошибка переполнения стека, которую я не знаю, как исправить. Я создаю приложение для Android, которое должно отображать дни между созданием записи sqlite и сегодняшним днем. Насколько я могу сказать, все работает правильно, кроме йодатима. Я получил эту ошибку при сборке проекта

[2010-08-10 02:08:50 - Grow Journal Beta] обрабатывает org/joda/time/DateTimeUtils.class...
[2010-08-10 02:08:50 - Grow Journal Beta] обрабатывает org/joda/time/DateTimeZone$1.class...
[2010-08-10 02:08:50 - Grow Journal Beta] предупреждение: игнорирование атрибута InnerClasses для анонимного внутреннего класса, который не поставляется со связанным атрибутом EnclosingMethod. (Этот класс, вероятно, был создан неработающим компилятором.)
[2010-08-10 02:08:50 - Grow Journal Beta] обрабатывает org/joda/time/DateTimeZone$Stub.class...

Это logcat:

08-13 22: 12: 11.823: ОШИБКА /AndroidRuntime(6537): необработанный обработчик: выход из основного потока из-за неисследованного исключения
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): java.lang.StackruError
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): на java.util.Hashtable.get(Hashtable.java:274)
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): на java.util.Properties.getProperty(Properties.java:177)
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): в java.lang.System.getProperty(System.java:440)
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): на java.lang.System.getProperty(System.java:412)
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): в org.joda.time.DateTimeZone.getDefault(DateTimeZone.java:132)
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): в org.joda.time.DateTimeZone.forID(DateTimeZone.java:190)
08-13 22:12:11.893: ОШИБКА /AndroidRuntime(6537): в org.joda.time.DateTimeZone.getDefault (DateTimeZone.java:132)

Посмотрев немного, я понял, что мне просто нужно перекомпилировать бинарный файл jodatime. Я использовал eclipse, создал новый проект и импортировал исходный код jodatime. Когда я пытаюсь скомпилировать, я получаю это в консоли:

Usage: java org.joda.time.tz.ZoneInfoCompiler <options> <source files>

Возможные варианты: -src Укажите, где читать исходные файлы. -dst Укажите, куда записывать сгенерированные файлы.

Не совсем уверен, куда идти отсюда. Любая помощь будет принята с благодарностью. Спасибо за ваше время.

StackTrace от переполнения:

Thread [main] (Suspended (исключение StackruError))   
    DateTimeZone.getDefault() строка: 147 
    ISOChronology.getInstance() строка: 86    
    DateTimeUtils.getChronology(хронология) строка: 231 ДатаКонвертер (AbstractConverter).getChronology (строка объекта, хронология): 82 строка: DateTime (BaseDateTime).(Object, Chronology) строка: 170 DateTime.(Object) строка: 168   
    PlantsCursorAdapter.newView(Context, Cursor, ViewGroup) строка: 71    
    PlantsCursorAdapter(CursorAdapter).getView(int, View, ViewGroup) строка: 182  
    ListView(AbsListView).obtainView(int) строка: 1274    
    ListView.measureHeightOfChildren(int, int, int, int, int) строка: 1147    
    ListView.onMeasure(int, int) строка: 1060 
    ListView(View).measure(int, int) line: 7966 
    TableLayout(ViewGroup).measureChildWithMargins(View, int, int, int, int) line: 3077 
    TableLayout(LinearLayout).measureChildBeforeLayout(View, int, int, int, int, int) line: 888 
    TableLayout.measureChildBeforeLay (View, int, int, int, int, int) строка: 453   
    TableLayout(LinearLayout).measureVertical(int, int) строка: 350   
    TableLayout.measureVertical(int, int) строка: 465 
    TableLayout.onMeasure(int, int) строка: 428   
    TableLayout(View).measure(int, int) строка: 7966  
    FrameLayout(ViewGroup).measureChildWithMargins(View, int, int, int), int) строка: 3077 
    FrameLayout.onMeasure(int, int) строка: 245   
    FrameLayout(View).measure(int, int) строка: 7966  
    LinearLayout.measureVertical(int, int) строка: 464    
    LinearLayout.onMeasure(int, int) строка: 278  
    LinearLayout(View).measure(int, int) строка: 7966 
    PhoneWindow$DecorView(ViewGroup).measureChildWithMargins(View, int, int, int, int) строка: 3077   
    PhoneWindow$DecorView(FrameLayout).onMeasure(int, int) строка: 245    
    PhoneWindow$DecorView(View).measure(int, int) строка: 7966    
    ViewRoot.performTraversals() строка: 767  
    ViewRoot.handleMessage(сообщение) строка: 1650  
    ViewRoot(обработчик).dispatchMessage(сообщение) строка: 99 
    Looper.loop() строка: 123 
    ActivityThread.main(String[]) строка: 4595    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) строка: не доступно [собственный метод] Метод.invoke(Объект, Объект t...) строка: 521  
    ZygoteInit$MethodAndArgsCaller.run() строка: 860  
    ZygoteInit.main(String[]) строка: 618 
    NativeStart.main(String[]) строка: недоступно [собственный метод] 

Источник DateTimeZone.class находится здесь

3 ответа

Проблемная рекурсия, по-видимому, между DateTimeZone.getDefault а также DateTimeZone.forID, Однако номера строк стека, похоже, не совпадают с исходным кодом Joda, который я здесь вижу. И в этом коде DateTimeZone.getDefault() Метод не смотрит на системные свойства... это происходит в статическом инициализаторе.

Кажется, что кодовая база Android использует измененную версию JodaTime.

Во всяком случае, это похоже на вызов JodaTime.setDefault(...) может быть обходным путем. Также убедитесь, что системное свойство user.timezone установлено.

(Я не думаю, что перекомпиляция / использование стандартного JodaTime является правильной стратегией. Android настраивает... какими бы они ни были... вероятно, есть причина.)

РЕДАКТИРОВАТЬ

Возвращаясь к этому, выясняется, что это было ошибкой в ​​JodaTime 1.6.1 на некоторых платформах (Android, Google-Apps). Система отслеживания ошибок показывает это как исправлено в JodaTime 1.6.2.

У меня просто та же проблема, я думаю, что это ошибка в joda-time 1.6.1, потому что все работает хорошо с версией 1.6. Я опубликовал отчет об ошибке на трекере ошибок joda-time, и я использую версию 1.6.

Пауло

Почему вы не можете использовать что-то вроде:

SELECT julianday('now') - julianday('1776-07-04');  

По вашему запросу?

Другие вопросы по тегам