Java 为什么位图对象在一次调用中返回值,而在另一次调用中返回空值?
我有一个位图对象,当ImageViewimgView的setImageBitmap()方法调用它时,它显示得非常好,但当我通过方法steg()调用它时,它有一个位图参数,并使用该参数传递另一个方法。在方法中访问同一位图对象的getWidth()值,但这次它返回null,正如我的LogCat中的NullPointerException所解释的那样。但是,如果setImageBitmap()方法有一个值,我不明白这怎么会是这样 但是,当我将同一位图对象(通过一个类和一个方法)传递给另一个包含下面一行的方法时,我的LogCat在下面一行声明该对象为null,但如果它在上面的setImageBitmap()中返回值,则不能为null。顺便说一句,bm是传递给新类时重命名的同一位图对象Java 为什么位图对象在一次调用中返回值,而在另一次调用中返回空值?,java,android,bitmap,nullpointerexception,Java,Android,Bitmap,Nullpointerexception,我有一个位图对象,当ImageViewimgView的setImageBitmap()方法调用它时,它显示得非常好,但当我通过方法steg()调用它时,它有一个位图参数,并使用该参数传递另一个方法。在方法中访问同一位图对象的getWidth()值,但这次它返回null,正如我的LogCat中的NullPointerException所解释的那样。但是,如果setImageBitmap()方法有一个值,我不明白这怎么会是这样 但是,当我将同一位图对象(通过一个类和一个方法)传递给另一个包含下面一行
bm.getWidth();//LogCat says this line can't run bc it there is a null object.
位图对象在这两个方法中以及在类之间干净地传递
public Uri encode(Bitmap covering, String msg, Context context, String title) {
//the Bitmap argument is fine
final Runnable mIncrementProgress = new Runnable() {
public void run() {
System.out.println("mIncrement Runnable HERE");
}
};
final Handler handler = new Handler();
Uri result=null;
String s = msg;//String to be encoded
int width = covering.getWidth();//If this line gets deleted of course
int height = covering.getHeight();//this line throws the same error
int[] oneD = new int[width * height];
covering.getPixels(oneD, 0, width, 0, 0, width, height);
int density = covering.getDensity();
covering.recycle();
byte[] byteImage = LSB2bit.encodeMessage(oneD, width, height, s,
new ProgressHandler() {
private int mysize;
private int actualSize;`
这些行代码片段显示了对象的传递方式
String filePath = new Cover().imgDecodableString;
BitmapFactory.Options bmfo = new Cover().opt;
//all items below are in onCreate() method except more method steg()
bmfo = new BitmapFactory.Options();
bmfo.inDither = false;
bmfo.inScaled = false;
bmfo.inDensity = 0;
bmfo.inJustDecodeBounds = false;
bmfo.inPurgeable = false;
bmfo.inSampleSize = 1;
bmfo.inScreenDensity = 0;
bmfo.inTargetDensity = 0;
Bitmap bm = BitmapFactory.decodeFile(filePath, bmfo);
steg(bm);
public void steg(Bitmap cover) {//this method is not in the onCreate() of course
encode.encode(cover, "MESSAGE", context, title);
}
提前感谢大家 您能否向我们展示与
bm.getWidth()相关的其余代码代码>?i、 e.您是如何创建此bm
对象的,还是通过某种方法传入的..@Gosu我刚刚添加了一些代码,以允许您查看位图对象通过类和方法的传输。您的encode
函数中有这样一条注释:“位图参数很好”。我不知道你这是什么意思,但是你能在函数的开头和调用getWidth()
之前添加一个if(covering!=null)//打印一些东西吗?如果covering实际上不是null,那么getWidth()不应该抛出NullPointerException@Gosu覆盖与“covBitmap”是同一对象,因此不为空。这就是问题所在
String filePath = new Cover().imgDecodableString;
BitmapFactory.Options bmfo = new Cover().opt;
//all items below are in onCreate() method except more method steg()
bmfo = new BitmapFactory.Options();
bmfo.inDither = false;
bmfo.inScaled = false;
bmfo.inDensity = 0;
bmfo.inJustDecodeBounds = false;
bmfo.inPurgeable = false;
bmfo.inSampleSize = 1;
bmfo.inScreenDensity = 0;
bmfo.inTargetDensity = 0;
Bitmap bm = BitmapFactory.decodeFile(filePath, bmfo);
steg(bm);
public void steg(Bitmap cover) {//this method is not in the onCreate() of course
encode.encode(cover, "MESSAGE", context, title);
}