Я пытаюсь добавить 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"
(из папки с ресурсами), но безрезультатно.
Как я могу решить эту проблему? Спасибо.
Проверьте кодировку файла heart_beat.json. Это "UTF-8 со спецификацией"?
Мой проект нацелен на Xamarin.Android. Существует активная проблема с тех пор, как Lottie перешла на библиотеки AndroidX. Приложение аварийно завершает работу, когда файл json имеет формат UTF-8 с кодировкой BOM.
Понятно. В 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"
Я проверил файл. Кодировка — UTF-8.