簡體   English   中英

xml中的java.lang.NullPointerException

[英]java.lang.NullPointerException in xml

這段代碼可以在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包含有問題的視圖,那么您可能希望在現場找到它們:

     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); } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM