Java 在API 22上启动AnimatedVectorDrawable时出现NullPointerException

Java 在API 22上启动AnimatedVectorDrawable时出现NullPointerException,java,android,nullpointerexception,animatedvectordrawable,Java,Android,Nullpointerexception,Animatedvectordrawable,我正在使用此代码片段启动一个AnimatedVectorDrawable动画: AnimatedVectorDrawable vectorAnim = (AnimatedVectorDrawable) ((ImageView) child).getDrawable(); vectorAnim.start(); (基本上我得到了ImageView的android:src,这是一个AnimatedVectorDrawable,然后我启动了动画) 到目前为止,它在我测试的每台设备上都能正常工作,但当

我正在使用此代码片段启动一个
AnimatedVectorDrawable
动画:

AnimatedVectorDrawable vectorAnim = (AnimatedVectorDrawable) ((ImageView) child).getDrawable();
vectorAnim.start();
(基本上我得到了ImageView的
android:src
,这是一个
AnimatedVectorDrawable
,然后我启动了动画)

到目前为止,它在我测试的每台设备上都能正常工作,但当我在API 22设备上运行我的应用程序时,会出现以下错误:

java.lang.NullPointerException: Attempt to invoke virtual method 'int java.util.ArrayList.size()' on a null object reference
                                                                          at android.graphics.drawable.AnimatedVectorDrawable.isStarted(AnimatedVectorDrawable.java:427)
                                                                          at android.graphics.drawable.AnimatedVectorDrawable.start(AnimatedVectorDrawable.java:440)
                                                                          at com.brickx.creartup.MainRoadmapAdapter.animateViews(MainRoadmapAdapter.java:263)
                                                                          at com.brickx.creartup.MainRoadmapAdapter.access$100(MainRoadmapAdapter.java:31)
                                                                          at com.brickx.creartup.MainRoadmapAdapter$1.onInflate(MainRoadmapAdapter.java:66)
                                                                          at android.view.ViewStub.inflate(ViewStub.java:284)
                                                                          at com.brickx.creartup.MainRoadmapAdapter.inflateBackground(MainRoadmapAdapter.java:215)
                                                                          at com.brickx.creartup.MainRoadmapAdapter.onCreateViewHolder(MainRoadmapAdapter.java:71)
                                                                          at com.brickx.creartup.MainRoadmapAdapter.onCreateViewHolder(MainRoadmapAdapter.java:31)
                                                                          at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6519)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5706)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5589)
                                                                          at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5585)
                                                                          at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2231)
                                                                          at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1558)
                                                                          at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1518)
                                                                          at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:610)
                                                                          at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3719)
                                                                          at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3436)
                                                                          at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3988)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.support.v4.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:611)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1076)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.support.design.widget.HeaderScrollingViewBehavior.layoutChild(HeaderScrollingViewBehavior.java:132)
                                                                          at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                          at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1361)
                                                                          at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:874)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1172)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.widget.FrameLayout.layoutChildren(FrameLayout.java:579)
                                                                          at android.widget.FrameLayout.onLayout(FrameLayout.java:514)
                                                                          at android.view.View.layout(View.java:15671)
                                                                          at android.view.ViewGroup.layout(ViewGroup.java:5038)
                                                                          at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1703)
                                                                          at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1557)
                                                                          at android.widget.LinearLayout.onLayout(LinearLayout.java:1466)
                                                                          at android.view.View.layout(View.java:15671)
你知道这是怎么回事吗

编辑


我知道NullPointerException的意思,但遗憾的是,我认为我无法控制这一点。我不明白为什么会在这里抛出这个异常…

好的,我找到了问题的根源!即使我不知道如何妥善解决这个问题

当我尝试在没有
target
属性的
AnimatedVectorDrawable
上启动动画时,会发生崩溃(我正在使用定义向量drawable及其动画)

更准确地说,我认为android会查看
动画向量
元素,如果未找到
目标
,则会抛出一个错误。同样,到目前为止,我只在API 22上遇到了这个问题,但我还没有测试其他API

目前我只能想到两种解决方案:

  • 将至少一个
    target
    元素添加到
    AnimatedVectorDrawable
  • 如果不需要动画,也可以使用一个简单的
    VectorDrawable
    (我使用了
    AnimatedVectorDrawable
    ,无论我的向量是否已设置动画,以便以后如果需要,可以轻松地向其添加动画)
编辑 我找到了一个简单的解决方法来避免更改所有内容,这可能会帮助其他人:我只需在所有不应该设置动画的
animatedvectorrawable
中添加一个哑
target

<target android:name="vector">
    <aapt:attr name="android:animation">
        <objectAnimator
            android:propertyName="alpha"
            android:valueTo="1"/>
    </aapt:attr>
</target>


这样,
AnimatedVectorDrawable
中不会发生任何更改,但不会显示错误。但我不建议这样做,因为它相当脏,可能会导致其他问题。

在API 21和22上发现了相同的问题

帮助我的解决方案是在
objectAnimator
上用xml定义参数
android:valueFrom
android:valueTo

<objectAnimator
    android:propertyName="fillColor"
    android:duration="250"
    android:valueFrom="#393749"
    android:valueTo="#00000000"
    android:valueType="colorType"/>


但是在上面的API上,它在没有android:valueFrom(疯狂的droid不会节省我们的时间:)

@PrzemysławMoskal的情况下工作,这个NPE被扔到了android级别,询问者无法控制
AnimatedVectorDrawable
类如何处理空指针。我怀疑你标记为傻瓜的问题的答案对这个提问者是否有帮助。@pushasha是的,我可能不应该在我的标题中写NullPointerException!我的错,但你是对的。我的问题更多的是关于这个异常的来源,而不是它的性质。@Keysaw我没有足够的信息给你一个答案,但我可以告诉你,空指针是指存储在
AnimatedVectorDrawableState
中的
Animator
数组。我怀疑这会有帮助,但如果没有其他人回答,希望这会给你一些东西继续下去。我建议你创建一个项目,在那里你可以始终如一地复制这一点,并在@pushasha上提交一个bug,你是绝对正确的。对此我很抱歉。你知道有没有可能“解冻”?我删除了建议重复的评论,但当我看到我提出的标志时,它仍然在等待审查。我想节省版主的时间并将其删除,因为这是不相关的,但我找不到一种方法来做到这一点。超级奇怪和有趣的异常,但事实上,如果在API级别22上的动画向量xml元素中没有目标,您将发生此崩溃。谷歌请修复它,也许通过在崩溃中提供更多有用的信息+来自meI的1有一个动画向量,它有一个目标,但它仍然抛出一个NPE。