xml 中的 java.lang.NullPointerException

标签 java android xml nullpointerexception

这段代码在 MainActivity 中可以正确工作,但我想将一些动画方法放在不同的类中,并从那里调用它,但我遇到了错误 我试图理解为什么它显示错误 有什么想法吗?

public class AnimationClass extends MainActivity{
    private static ImageButton heart_icon,bee_icon;
    private static int kill_flag = 0;
    private static Animation anim_heart, anim_bee;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        heart_icon=(ImageButton)findViewById(R.id.heart_icon);
        bee_icon = (ImageButton)findViewById(R.id.bee_icon);
    }

    public static void loadAnimations(Activity activity){
        anim_heart = AnimationUtils.loadAnimation(activity, R.anim.heart_anim);
        heart_icon.startAnimation(anim_heart);

        anim_bee = AnimationUtils.loadAnimation(activity, R.anim.bee_anim);
        bee_icon.startAnimation(anim_bee);
    }
}

动画:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:shareInterpolator="true">
    <scale
        android:fillAfter="true"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:duration="1000"
        android:fromXScale="1.0"
        android:toXScale="1.2"
        android:fromYScale="1.0"
        android:toYScale="1.2"
        android:pivotX="50%"
        android:pivotY="50%"/>
    <rotate
        android:fillAfter="true"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:duration="1200"
        android:fromDegrees="-20"
        android:toDegrees="15"
        android:pivotX="80%"
        android:pivotY="20%"/>
    <translate
        android:fillAfter="true"
        android:repeatCount="infinite"
        android:repeatMode="reverse"
        android:duration="800"
        android:toXDelta="5"
        android:toYDelta="-5"/>
    <alpha
        android:fromAlpha="0"
        android:toAlpha="1"
        android:duration="1500"/>

</set>

错误:anim_heart = AnimationUtils.loadAnimation(activity, R.anim.heart_anim);

最佳答案

您似乎误解了静态变量和方法的工作原理。

当您创建AnimationClass的对象时:

new AnimationClass()

onCreate 被调用,两个 ImageButtons 已正确设置。

但是,当您调用静态方法 loadAnimations 时,ImageButton 变量可能仍然为 null,这反过来会抛出 NPE。

不同的解决方案:

  1. 检查空变量:

    public static void loadAnimations(Activity activity){
        anim_heart = AnimationUtils.loadAnimation(activity, R.anim.heart_anim);
        if (heart_icon != null) {
            heart_icon.startAnimation(anim_heart);
        }
    
        anim_bee = AnimationUtils.loadAnimation(activity, R.anim.bee_anim);
        if (bee_icon != null) {
            bee_icon.startAnimation(anim_bee);
        }
    }
    
  2. 如果您作为参数传递给 loadAnimations 的 Activity 包含有问题的 View ,您可能希望当场找到它们:

    public static void loadAnimations(Activity activity){
        heart_icon = (ImageButton) activity.findViewById(R.id.heart_icon);
        bee_icon = (ImageButton) activity.findViewById(R.id.bee_icon);
    
        anim_heart = AnimationUtils.loadAnimation(activity, R.anim.heart_anim);
        heart_icon.startAnimation(anim_heart);
    
        anim_bee = AnimationUtils.loadAnimation(activity, R.anim.bee_anim);
        bee_icon.startAnimation(anim_bee);
    }
    

关于xml 中的 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28488247/

相关文章:

java - 这两个 Spring IOC 注入(inject)有什么区别?

java - 如何正确停止 "drawing"线程

c# - 使用 XSLT 将 XML 转换为固定长度的文本文件

java - JSP 标记文件能否访问其调用 JSP 的 PageContext?

java - 如何从 MetaMessage.getData() 返回的字节数组中获取整数值?

java - 我如何在 Java 中确定图像的色彩空间?

android - 如何使用 ShareCompat 共享多个文件

android - CursorAdapter 中的复选框

xml - 如何在 XPath 中进行否定连接 ("except")?

java - 如何获取drawable中图片的照片名称?