2013-08-07 13 views
7

Tôi bắt đầu sử dụng ICU4J trong dự án Android của mình. Nhưng khi tôi chạy dự án trên một thiết bị, lúc khởi động, tôi gặp sự cố. Dưới đây là lỗi:Android và ICU 5.0

FATAL EXCEPTION: main 
java.lang.ExceptionInInitializerError 
    at com.ibm.icu.text.SimpleDateFormat.<clinit>(SimpleDateFormat.java:849) 
    at com.ibm.icu.text.DateFormat.get(DateFormat.java:1492) 
    at com.ibm.icu.text.DateFormat.getDateInstance(DateFormat.java:1191) 
    at com.phonedev.myApp.calendar.TimeCursor.getLongDate(TimeCursor.java:333) 
    at com.phonedev.myApp.about.VersionInfo.getBuildDateTime(VersionInfo.java:44) 
    at com.phonedev.myApp.myAppActivity.onCreate(myAppActivity.java:184) 
    at android.app.Activity.performCreate(Activity.java:5133) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
    at android.app.ActivityThread.access$600(ActivityThread.java:141) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:5103) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:525) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.util.MissingResourceException: Could not find the bundle com/ibm/icu/impl/data/icudt50b/en_US 
    at com.ibm.icu.impl.ResourceBundleWrapper.getBundleInstance(ResourceBundleWrapper.java:109) 
    at com.ibm.icu.util.UResourceBundle.instantiateBundle(UResourceBundle.java:573) 
    at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:145) 
    at com.ibm.icu.util.UResourceBundle.getBundleInstance(UResourceBundle.java:228) 
    at com.ibm.icu.impl.CalendarData.<init>(CalendarData.java:28) 
    at com.ibm.icu.util.Calendar.setWeekData(Calendar.java:4604) 
    at com.ibm.icu.util.Calendar.<init>(Calendar.java:1584) 
    at com.ibm.icu.util.GregorianCalendar.<init>(GregorianCalendar.java:391) 
    at com.ibm.icu.util.GregorianCalendar.<init>(GregorianCalendar.java:337) 
    at com.ibm.icu.text.DateFormat$Field.<clinit>(DateFormat.java:1787) 
    ... 20 more 

Dường như nguồn ICU đòi hỏi một số tác phẩm hơn, nhưng tôi đã thêm tất cả các nguồn tôi tìm thấy trong lọ ... Nếu ai đó có cùng một vấn đề hoặc chỉ có giải pháp .. Cảm ơn!

Edit: Chỉ cần có những cảnh báo này:

dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_root' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_zoneinfo64' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_supplementalData' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_res' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_res_index' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/[email protected]=gregorian' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en' 
dvmFindClassByName rejecting 'com/ibm/icu/impl/data/icudt50b_en_US' 
threadid=11: thread exiting with uncaught exception (group=0x4176a700) 
+0

Bạn đã bao giờ tìm thấy câu trả lời cho điều này chưa? Tôi gặp vấn đề tương tự –

Trả lời

4

Ok tôi đã tìm ra câu trả lời cho vấn đề này. Rõ ràng bạn không thể tải xuống tệp .jar được xây dựng đầy đủ cho ICU và chỉ cần thả nó vào. Nó không chứa các tệp dữ liệu.

Bạn tới:

  1. Tải file .tgz nói rằng "kho lưu trữ tar gzipped bao gồm toàn bộ gói nguồn"
  2. Uncompress tập tin đó và cd vào thư mục đó
  3. Run "ant "để xây dựng ICU4J cho mình
  4. Nó sẽ tạo tệp icu4j.jar chứa tệp dữ liệu bạn cần. Bạn có thể thả thư mục đó vào thư mục libs của mình và sửa đổi tệp build.gradle gradle của bạn để bao gồm nó

Có thể giúp nếu điều này được giải thích ở đâu đó trên trang web của họ hoặc nếu chúng thực sự cung cấp tệp .jar bao gồm các tệp dữ liệu . Điều này gây ra một cơn đau đầu dài một ngày để tìm ra để hy vọng điều này sẽ giúp người khác.

+1

Có cảm ơn! Đó là những gì tôi đã làm. Nhưng đây là một giải pháp tồi tệ đối với tôi vì cái bình quá nặng ... Quá khứ từ 7Mb đến 16Mb (xấp xỉ) –

+0

Không, cảm ơn, kích thước toàn bộ ứng dụng của tôi nhỏ hơn 3MB ... – Pedram