Android:等待加载位图

Android:等待加载位图,android,bitmap,nullpointerexception,scaling,Android,Bitmap,Nullpointerexception,Scaling,我正在尝试从资源加载位图,然后将其缩放到所需的大小。问题是,当我尝试更改其大小时,它返回一个NullPointerException。我想这是因为BitmapFactory在另一个线程上加载和解码图像,而我的代码没有完成就继续运行。然后,在这个过程完成之前,它就开始调整大小了。 至少我是这么想的。但后来我试着检查我的“图像”是否为空,它是否为空。。。所以我不太清楚到底发生了什么 public void setImage(int id, float w){ image = BitmapF

我正在尝试从资源加载位图,然后将其缩放到所需的大小。问题是,当我尝试更改其大小时,它返回一个NullPointerException。我想这是因为BitmapFactory在另一个线程上加载和解码图像,而我的代码没有完成就继续运行。然后,在这个过程完成之前,它就开始调整大小了。 至少我是这么想的。但后来我试着检查我的“图像”是否为空,它是否为空。。。所以我不太清楚到底发生了什么

 public void setImage(int id, float w){
    image = BitmapFactory.decodeResource(Help.helperActivity.getResources(), id);

    while(image == null){ // this never runs, so image can't be null
        try {
            Thread.sleep(5);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    float ratio = image.getWidth() / image.getHeight();
    Log.d("tag", "ratio: " + ratio);
    float h = w / ratio;
    image = Bitmap.createScaledBitmap(image, (int) (w*Help.pw), (int) (h*Help.ph), true);
}
编辑:这是stacktrace:

FATAL EXCEPTION: Thread-4
                                                                         Process: com.example.nicolas.vidalvsep, PID: 2585
                                                                         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:883)
                                                                             at android.graphics.Bitmap.createBitmap(Bitmap.java:856)
                                                                             at android.graphics.Bitmap.createBitmap(Bitmap.java:787)
                                                                             at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:663)
                                                                             at com.example.nicolas.vidalvsep.Sprite.setImage(Sprite.java:92)
                                                                             at com.example.nicolas.vidalvsep.Vidal.<init>(Vidal.java:14)
                                                                             at com.example.nicolas.vidalvsep.GameView.initialize(GameView.java:72)
                                                                             at com.example.nicolas.vidalvsep.GameView.gameLoop(GameView.java:51)
                                                                             at com.example.nicolas.vidalvsep.GameView.access$000(GameView.java:16)
                                                                             at com.example.nicolas.vidalvsep.GameView$1.run(GameView.java:43)
                                                                             at java.lang.Thread.run(Thread.java:761)
致命异常:线程4
流程:com.example.nicolas.vidalvsep,PID:2585
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.graphics.Bitmap.setHasAlpha(布尔)”
位于android.graphics.Bitmap.createBitmap(Bitmap.java:883)
位于android.graphics.Bitmap.createBitmap(Bitmap.java:856)
位于android.graphics.Bitmap.createBitmap(Bitmap.java:787)
位于android.graphics.Bitmap.createScaledBitmap(Bitmap.java:663)
位于com.example.nicolas.vidalvsep.Sprite.setImage(Sprite.java:92)
位于com.example.nicolas.vidalvsep.Vidal.(Vidal.java:14)
位于com.example.nicolas.vidalvsep.GameView.initialize(GameView.java:72)
位于com.example.nicolas.vidalvsep.GameView.gameLoop(GameView.java:51)
访问com.example.nicolas.vidalvsep.GameView.access$000(GameView.java:16)
位于com.example.nicolas.vidalvsep.GameView$1.run(GameView.java:43)
运行(Thread.java:761)

BitmapFactory
不在单独的线程上执行其工作。您必须查看堆栈跟踪,以查看到底是什么引发了异常。如果您想获得阅读帮助,您需要将问题与完整跟踪以及它引用的代码部分(如果尚未发布)联系起来。我已将堆栈跟踪添加到postHmm中,看起来创建
位图的本机方法失败并返回null。可能是内存不足了?您最终传递给
createScaledBitmap()
的维度是什么?如果尝试使用较小的图像和尺寸,会发生什么情况?