Lottie error: "java.lang.IllegalStateException: Unable to parse composition"
Lottie error: "java.lang.IllegalStateException: Unable to parse composition"
我正在尝试将 LottieAnimationView 添加到我项目中的 xml 布局中,但出现此异常:“java.lang.IllegalStateException:无法解析合成”。
java.lang.IllegalStateException: Unable to parse composition
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:78)
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:71)
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:95)
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:88)
at com.airbnb.lottie.LottieTask.notifyFailureListeners(LottieTask.java:158)
at com.airbnb.lottie.LottieTask.access0(LottieTask.java:27)
at com.airbnb.lottie.LottieTask.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.call(LottieCompositionFactory.java:234)
at com.airbnb.lottie.LottieCompositionFactory.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.call(LottieCompositionFactory.java:234)
at com.airbnb.lottie.LottieCompositionFactory.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_fileName="heart_beat.json"
替换 app:lottie_rawRes="@raw/heart_beat"
(来自 assets 文件夹),但仍然没有结果。
我该如何解决这个问题?谢谢。
检查 heart_beat.json 文件的编码是什么。
是“带 BOM 的 UTF-8”吗?
我的项目目标 Xamarin.Android。自 Lottie 移至 AndroidX 库以来,存在一个活跃的问题。当 json 文件为采用 BOM 编码的 UTF-8 时,应用程序崩溃。
知道了。在 build.gradle(Module:app) 中,我出于某种原因排除了 'okio' 和 'okhttp' 模块。这导致了异常。
configurations {
all*.exclude module: 'okhttp'
all*.exclude module: 'okio'
}
如果只想避免崩溃,可以在设置动画之前设置 lottie 失败监听器而不是默认监听器。
lottieView.setFailureListener { t ->
//do on error
}
lottieView.setAnimation(...)
在我的例子中,这发生在 lottie json 文件被损坏时。与任何其他 lottie 文件一起工作正常。
我正在尝试将 LottieAnimationView 添加到我项目中的 xml 布局中,但出现此异常:“java.lang.IllegalStateException:无法解析合成”。
java.lang.IllegalStateException: Unable to parse composition
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:78)
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:71)
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:95)
at com.airbnb.lottie.LottieAnimationView.onResult(LottieAnimationView.java:88)
at com.airbnb.lottie.LottieTask.notifyFailureListeners(LottieTask.java:158)
at com.airbnb.lottie.LottieTask.access0(LottieTask.java:27)
at com.airbnb.lottie.LottieTask.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.call(LottieCompositionFactory.java:234)
at com.airbnb.lottie.LottieCompositionFactory.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.call(LottieCompositionFactory.java:234)
at com.airbnb.lottie.LottieCompositionFactory.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_fileName="heart_beat.json"
替换 app:lottie_rawRes="@raw/heart_beat"
(来自 assets 文件夹),但仍然没有结果。
我该如何解决这个问题?谢谢。
检查 heart_beat.json 文件的编码是什么。 是“带 BOM 的 UTF-8”吗?
我的项目目标 Xamarin.Android。自 Lottie 移至 AndroidX 库以来,存在一个活跃的问题。当 json 文件为采用 BOM 编码的 UTF-8 时,应用程序崩溃。
知道了。在 build.gradle(Module:app) 中,我出于某种原因排除了 'okio' 和 'okhttp' 模块。这导致了异常。
configurations {
all*.exclude module: 'okhttp'
all*.exclude module: 'okio'
}
如果只想避免崩溃,可以在设置动画之前设置 lottie 失败监听器而不是默认监听器。
lottieView.setFailureListener { t ->
//do on error
}
lottieView.setAnimation(...)
在我的例子中,这发生在 lottie json 文件被损坏时。与任何其他 lottie 文件一起工作正常。