2017-03-18 23 views
14

Tôi hiện đang làm việc trên một ứng dụng Android với Kotlin trong phiên bản 1.1.1

Trong mã của tôi, tôi phải sắp lá cây của nhiều forEach cấu trúc theo thứ tự để đọc một số số MutableListMutableMap.

Thật không may, tai nạn ứng dụng của tôi với stacktrace sau:

java.lang.NoClassDefFoundError: com.package.fragment.ReminderAddFragment$onRetrieveBusinessObjects$$inlined$forEach$lambda$1 at com.package.fragment.ReminderAddFragment.onRetrieveBusinessObjects(ReminderAddFragment.kt:275) at com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjects(Droid4mizer.java:552) at com.smartnsoft.droid4me.app.Droid4mizer.onRetrieveBusinessObjectsInternal(Droid4mizer.java:606) at com.smartnsoft.droid4me.app.Droid4mizer.access$000(Droid4mizer.java:46) at com.smartnsoft.droid4me.app.Droid4mizer$1.run(Droid4mizer.java:197) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:423) at java.util.concurrent.FutureTask.run(FutureTask.java:237) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) at java.lang.Thread.run(Thread.java:818)

Đây mã

tutorialCategories.forEach { (_, _, _, _, _, tutorials) -> 
    tutorials.forEach { tutorial -> 
    if (tutorial.id == simpleReminderFromExtra.tutorialId) 
    { 
     //... 
     val mapOfreminders = mutableMapOf<Int, MutableList<Reminder>>() 
     val reminders = ReminderServices.getReminderByTutorialId(simpleReminderFromExtra.tutorialId) 

     reminders.forEach { reminder -> 
     //... 
     } 

     mapOfreminders.forEach { _, finalReminders -> 
     //... 

     finalReminders.forEach { reminder -> 
      //... 
     } 

     //... 
     } 
    } 
    } 
} 

đâu:

  • tutorialCategories là một List;
  • tutorialsList;
  • remindersList;

Dòng 275 của mã là mapOfreminders.forEach { _, finalReminders ->.

Trong trình gỡ lỗi, tôi có thể đánh giá biến số mapOfreminders và mọi thứ có vẻ không sao.

Nếu ai đó có thể giúp giải quyết vấn đề này!

+0

Bạn cũng có thể chỉ định, bạn sử dụng phiên bản Kotlin nào? – Ilya

+0

Tôi đang sử dụng Kotlin 1.1.1. Tôi đã chỉnh sửa bài đăng của mình. – rolandl

+0

Bạn có thể đăng thêm ngữ cảnh, như bao gồm các định nghĩa và biến của bạn không? Bạn có thể, bằng cách nào đó lấy phiên bản trong mã trước khi vụ tai nạn? Nếu bạn đang nhận được một lỗi không có lớp-def, bạn hoặc là phân phối nhị phân của bạn mà không cần phụ thuộc yêu cầu, hoặc đang chạy với một phiên bản khác nhau sau đó bạn được xây dựng với. –

Trả lời

27

Sau khi đọc số post của Dan Lew một vài ngày trước, tôi sẽ đề xuất rằng điều này có thể được gây ra bằng cách sử dụng phương pháp Map.forEach { k, v -> } từ Java 8, có thể không khả dụng trong thời gian chạy Android.

Bạn có thể thử sử dụng forEach khác với tham số đơn nhập xuất phát từ tiêu chuẩn Kotlin thư viện:

mapOfreminders.forEach { (_, finalReminders) -> } 

Ở đây ngoặc được sử dụng để destructure tham số nhập vào hai biến: Phím bỏ qua và finalReminders giá trị.

+0

Nó hoạt động! Thk bạn! – rolandl

+0

Cảm ơn bạn, chỉ cần dành 1,5 giờ trên này, suy nghĩ Proguard là vấn đề. –

+0

Tuyệt vời, sau khi vé của tôi bị từ chối, tôi cảm thấy thất vọng về điều này ... một phần vui nhộn đã không bị lỗi trên LG G5 Android 7.0 Hy vọng phiên bản gradle mới với hỗ trợ java 1.8 sẽ lỗi thời. – Mario

Các vấn đề liên quan