Ошибка Lottie: «java.lang.IllegalStateException: невозможно проанализировать композицию»

Я пытаюсь добавить LottieAnimationView в свой XML-макет в своем проекте, но получаю это исключение: «java.lang.IllegalStateException: невозможно проанализировать композицию».

java.lang.IllegalStateException: Unable to parse composition
    at com.airbnb.lottie.LottieAnimationView$1.onResult(LottieAnimationView.java:78)
    at com.airbnb.lottie.LottieAnimationView$1.onResult(LottieAnimationView.java:71)
    at com.airbnb.lottie.LottieAnimationView$3.onResult(LottieAnimationView.java:95)
    at com.airbnb.lottie.LottieAnimationView$3.onResult(LottieAnimationView.java:88)
    at com.airbnb.lottie.LottieTask.notifyFailureListeners(LottieTask.java:158)
    at com.airbnb.lottie.LottieTask.access$200(LottieTask.java:27)
    at com.airbnb.lottie.LottieTask$1.run(LottieTask.java:133)
    at android.os.Handler.handleCallback(Handler.java:883)
    at android.os.Handler.dispatchMessage(Handler.java:100)
    at android.os.Looper.loop(Looper.java:237)
    at android.app.ActivityThread.main(ActivityThread.java:7860)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
 Caused by: java.util.concurrent.ExecutionException: java.lang.NoClassDefFoundError: Failed resolution of: Lokio/Okio;
    at java.util.concurrent.FutureTask.report(FutureTask.java:123)
    at java.util.concurrent.FutureTask.get(FutureTask.java:193)
    at com.airbnb.lottie.LottieTask$LottieFutureTask.done(LottieTask.java:175)
    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
    at java.util.concurrent.FutureTask.run(FutureTask.java:271)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:919)
 Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Lokio/Okio;
    at com.airbnb.lottie.LottieCompositionFactory.fromRawResSync(LottieCompositionFactory.java:265)
    at com.airbnb.lottie.LottieCompositionFactory$3.call(LottieCompositionFactory.java:234)
    at com.airbnb.lottie.LottieCompositionFactory$3.call(LottieCompositionFactory.java:229)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:919) 
 Caused by: java.lang.ClassNotFoundException: Didn't find class "okio.Okio" on path: DexPathList[[zip file "/data/app/com.create.loop-D3ZAa0jgAPGefDD0MoGI3A==/base.apk"],nativeLibraryDirectories=[/data/app/com.create.loop-D3ZAa0jgAPGefDD0MoGI3A==/lib/arm, /system/lib, /vendor/lib, /system/product/lib]]
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:196)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
    at com.airbnb.lottie.LottieCompositionFactory.fromRawResSync(LottieCompositionFactory.java:265) 
    at com.airbnb.lottie.LottieCompositionFactory$3.call(LottieCompositionFactory.java:234) 
    at com.airbnb.lottie.LottieCompositionFactory$3.call(LottieCompositionFactory.java:229) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:919) 

Часть макета XML:

    <com.airbnb.lottie.LottieAnimationView
    android:id = "@+id/animationView"
    android:layout_width = "50dp"
    android:layout_height = "50dp"
    app:layout_constraintBottom_toBottomOf = "parent"
    app:layout_constraintEnd_toEndOf = "parent"
    app:layout_constraintStart_toStartOf = "parent"
    app:layout_constraintTop_toTopOf = "parent"
    app:lottie_autoPlay = "true"
    app:lottie_loop = "true"
    app:lottie_rawRes = "@raw/heart_beat" />

Что интересно, когда я создал новый тестовый проект и вставил приведенный выше код во вновь созданный файл activity_main.xml, в новом проекте все отлично работает.

Я попытался заменить app:lottie_rawRes = "@raw/heart_beat" на app:lottie_fileName = "heart_beat.json" (из папки с ресурсами), но безрезультатно. Как я могу решить эту проблему? Спасибо.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
7 373
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Проверьте кодировку файла heart_beat.json. Это "UTF-8 со спецификацией"?

Мой проект нацелен на Xamarin.Android. Существует активная проблема с тех пор, как Lottie перешла на библиотеки AndroidX. Приложение аварийно завершает работу, когда файл json имеет формат UTF-8 с кодировкой BOM.

Я проверил файл. Кодировка — UTF-8.

Tonton 19.12.2020 10:12
Ответ принят как подходящий

Понятно. В build.gradle(Module:app) по какой-то причине я исключил модули okio и okhttp. Это привело к исключению.

configurations {
    all*.exclude module: 'okhttp'
    all*.exclude module: 'okio'
}

Если вы хотите просто избежать сбоя, вы можете установить прослушиватель ошибок лотереи вместо стандартного, прежде чем устанавливать анимацию.

lottieView.setFailureListener { t ->
    //do on error
}
lottieView.setAnimation(...)

в моем случае это произошло, когда файл json лотереи был просто поврежден. отлично работал с любыми другими файлами лотереи.

Посмотрите, просто замените, чтобы исправить это

app:lottie_rawRes = "@raw/heart_beat"

с

app:lottie_fileName = "heart_beat.json"

Лотти по умолчанию ищет в папке src/main/assets.

Но из-за этой ошибки, возможно, ваша проблема с кодом связана с этим

class "okio.Okio" 

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