缩放位图导致 Android 中的 NullPointerException



我正在尝试缩放位图图像。但是,当我缩放它时,我收到一个错误。这是我的完整堆栈跟踪:

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: com.nodomain.speedtap2, PID: 3113
              java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nodomain.speedtap2/com.nodomain.speedtap2.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Bitmap.setHasAlpha(boolean)' on a null object reference
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3322)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3418)
                  at android.app.ActivityThread.access$1100(ActivityThread.java:231)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823)
                  at android.os.Handler.dispatchMessage(Handler.java:102)
                  at android.os.Looper.loop(Looper.java:148)
                  at android.app.ActivityThread.main(ActivityThread.java:7422)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
               Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Bitmap.setHasAlpha(boolean)' on a null object reference
                  at android.graphics.Bitmap.createBitmap(Bitmap.java:979)
                  at android.graphics.Bitmap.createBitmap(Bitmap.java:946)
                  at android.graphics.Bitmap.createBitmap(Bitmap.java:877)
                  at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:753)
                  at com.nodomain.speedtap2.MainMenu.<init>(MainMenu.java:47)
                  at com.nodomain.speedtap2.MainActivity$GameView.<init>(MainActivity.java:54)
                  at com.nodomain.speedtap2.MainActivity.onCreate(MainActivity.java:33)
                  at android.app.Activity.performCreate(Activity.java:6904)
                  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3269)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3418) 
                  at android.app.ActivityThread.access$1100(ActivityThread.java:231) 
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1823) 
                  at android.os.Handler.dispatchMessage(Handler.java:102) 
                  at android.os.Looper.loop(Looper.java:148) 
                  at android.app.ActivityThread.main(ActivityThread.java:7422) 
                  at java.lang.reflect.Method.invoke(Native Method) 
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) `

但是我不是已经用BitmapFactory.decodeResource(...)制作了位图吗?这是我的代码:

public class MainMenu {
private Bitmap playButton;
public MainMenu (Context context) {
    playButton = BitmapFactory.decodeResource(context.getResources(), R.drawable.play_button);
    float aspectRatio = 421/475;
    int playButtonWidth = MainActivity.screenX / 5;
    int playButtonHeight = (int)(MainActivity.screenX / (aspectRatio));
    playButton = Bitmap.createScaledBitmap(playButton, playButtonWidth, playButtonHeight, false);
}

也许我没有完全理解错误...

public class MainMenu {
public static Bitmap playButton;
Context mcontext;
public static Bitmap MainMenu(Context context) {
    playButton = BitmapFactory.decodeResource(context.getResources(), R.drawable.icon);
    float aspectRatio = 421/475;
    int playButtonWidth = MainActivity.screenX / 5;
    int playButtonHeight = (int)(MainActivity.screenX / (aspectRatio));
    playButton = Bitmap.createScaledBitmap(playButton, 100, 100, false);
    return playButton;
}
}

问题是你的播放按钮宽度,播放按钮高度返回空。 所以它崩溃了,请分享你如何获得 MainActivity.screenX ,试试这个

最新更新