2012-05-03 17 views
5

Çözmenin kolay olduğunu düşündüğüm bir problemde yaklaşık 2 saat kaldım. Android platformu için özel bir tarih çağrısı seçicisi yapıyorum ve standart java.util.Calendar ve java.util.Date sınıflarının yavaşlığı nedeniyle JODA kütüphanesini kullanmaya karar verdim.Android java.lang.NoClassDefFoundError JODA kütüphanelerini kullanarak

Maalesef 'JAR' referansları ile ilgili herhangi bir deneyimim yok (beni affet ... COM ve .NET meclislerinden geliyorum =) ...), ama internette bazı ipuçları öğreniyorum ama belli ki olmak yanlış ... Bunlar benim projede kütüphaneyi kullanmaya aldı adımlar şunlardır:

  1. 2,1
  2. benim proje klasörüne
  3. Add 'içine 'lib' klasör oluşturun son JODA kütüphaneye indirin joda-time-2.1.jar '' lib 'klasörüne.
  4. 'joda-time-2.1.jar' kitaplığını derleme yoluna ekleyin.
  5. Add 'joda zamanlı 2.1-javadoc.jar' 'joda zamanlı 2.1-sources.jar' 'java kaynak eklentilerinin' ve 'javadoc konum olarak yukarıdaki kütüphaneleri Set 'lib' klasörüne
  6. ve 'joda-time-2.1 başvurulan kütüphane için.
  7. Yeni kitaplığı koduma (ehm ehm 'intelli-sense' ve derleyici herhangi bir hata veya uyarı atmıyor) kullanın.
  8. Hata ayıklamayı gerçek veya sanal aygıtta başlatın.

    DateTime newDate = new DateTime(2012, 5, 3, 12, 0, 0); 
    

    Ve aşağıdaki yığın izleme verir:: o aşağıdaki satırı (BTW joda kullanan ilk bir) söz konusu olduğunda

, ayıklama durur

05-03 19:09:14.349: E/AndroidRuntime(4071): java.lang.NoClassDefFoundError: org.joda.time.DateTime 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at it.paganel.droidMessageExport.Control.TimePickerControl.SetTimePart(TimePickerControl.java:83) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at it.paganel.droidMessageExport.Control.TimePickerControl.onClick(TimePickerControl.java:116) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.view.View.performClick(View.java:2454) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.view.View$PerformClick.run(View.java:9030) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.os.Handler.handleCallback(Handler.java:587) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.os.Handler.dispatchMessage(Handler.java:92) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.os.Looper.loop(Looper.java:123) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at android.app.ActivityThread.main(ActivityThread.java:4641) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.reflect.Method.invoke(Method.java:521) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:870) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at dalvik.system.NativeStart.main(Native Method) 
05-03 19:09:14.349: E/AndroidRuntime(4071): Caused by: java.lang.ClassNotFoundException: org.joda.time.DateTime in loader dalvik.system.PathClassLoader[/data/app/it.paganel.droidMessageExport-2.apk] 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532) 
05-03 19:09:14.349: E/AndroidRuntime(4071):  ... 13 more 

Birisi yardımcı olabilir ben mi? Şimdiden teşekkürler!

+0

DateTime için kullandığınız içe aktarma ifadesi nedir? – Sam

+0

Projemi farklı bir bilgisayarda açarken aynı sorunla karşılaşıyorum, Eclipse kütüphaneye karşı derleme yapıyor ancak JodaTime kitaplığı DateTime kurucusunun ilk çağrısında çöküyor. – Luke

cevap

7

Lib klasörünü libs olarak yeniden adlandırın. ADT Tools 17'de olduğu gibi, externals kavanozları, bu klasörün içinde bulunuyorlarsa, sadece apk ile paketlenirler. Alternatif olarak, "Yapı yolunu yapılandır .." -> "Sipariş ver ve ver" 'e gidip kavanozun yanındaki onay kutusuna tıklayabilirsiniz. çözüm arıyor olabilir Başkaları için

+0

Evet, anladım! Ben klasör adı yanlış ... "lib" yerine "libs" olarak yeniden adlandırmak çok iyi çalışıyor! ama DateTime() yapıcısını kullandığımda büyük bir yavaşlık fark ettim.Örneğin, yeni bir DateTime nesnesi oluşturmak için O2Droid bağlantı noktası olan Samsung Omnia 2 cihazım (Froyo sürümüne bağlı olarak) yaklaşık 30 saniye sürüyor. Honeycomb'lu Acer A500 tabletim yaklaşık 3 saniye sürüyor ... normal mi ??? Bu sorun, JAR'ye başvurmak için kullandığım yöntemle ilgili olabilir mi? Herkes bu kütüphaneyle performansınızı hızlandırmak için bir numara biliyor mu? – GiveEmTheBoot

+0

Bu tartışmayı yavaş başlangıçta yardım için kontrol etmek isteyebilirsiniz: http://stackoverflow.com/questions/5059663/android-java-joda-date-is-slow – sdouglass

1

, orada sadece keşfedilen başka bir olası neden olduğu: Açık Proje> Özellikler> Java Build Path> Kütüphaneler ve JodaTime Android bağımlılıklar altında olup olmadığını kontrol veya Özel Android Kütüphaneler. Ardından, ilgili seçeneğin Sipariş ve Verme sekmesinde işaretlendiğinden emin olun. Çalışması için Android Private Libraries (JodaTime listelenir) kontrol etmek zorunda kaldı.

Bunun benzer sorunlar için de geçerli olduğunu ve mutlaka JodaTime ile ilgili olmadığını varsayıyorum.

İlgili konular