Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么位图对象在一次调用中返回值,而在另一次调用中返回空值?_Java_Android_Bitmap_Nullpointerexception - Fatal编程技术网

Java 为什么位图对象在一次调用中返回值,而在另一次调用中返回空值?

Java 为什么位图对象在一次调用中返回值,而在另一次调用中返回空值?,java,android,bitmap,nullpointerexception,Java,Android,Bitmap,Nullpointerexception,我有一个位图对象,当ImageViewimgView的setImageBitmap()方法调用它时,它显示得非常好,但当我通过方法steg()调用它时,它有一个位图参数,并使用该参数传递另一个方法。在方法中访问同一位图对象的getWidth()值,但这次它返回null,正如我的LogCat中的NullPointerException所解释的那样。但是,如果setImageBitmap()方法有一个值,我不明白这怎么会是这样 但是,当我将同一位图对象(通过一个类和一个方法)传递给另一个包含下面一行

我有一个位图对象,当ImageViewimgView的setImageBitmap()方法调用它时,它显示得非常好,但当我通过方法steg()调用它时,它有一个位图参数,并使用该参数传递另一个方法。在方法中访问同一位图对象的getWidth()值,但这次它返回null,正如我的LogCat中的NullPointerException所解释的那样。但是,如果setImageBitmap()方法有一个值,我不明白这怎么会是这样

但是,当我将同一位图对象(通过一个类和一个方法)传递给另一个包含下面一行的方法时,我的LogCat在下面一行声明该对象为null,但如果它在上面的setImageBitmap()中返回值,则不能为null。顺便说一句,bm是传递给新类时重命名的同一位图对象

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