简体   繁体   English

setBitmap抛出空指针异常

[英]setBitmap throws null pointer exception

I am getting the image from socket as: 我从套接字获取图像为:

        mByteArray = new char[size+1];
        int count = 0;
         r.read(mByteArray,0, size);
        int nbrOfPixels = width*height;
        Log.i("nbrOfPixels", String.valueOf(nbrOfPixels));

        int pixels[] = new int[nbrOfPixels];
        for(int i = 0; i < nbrOfPixels; i++) {
            int r = mByteArray[3*i];
            int g = mByteArray[3*i + 1];
            int b = mByteArray[3*i + 2];
            pixels[i] = Color.rgb(r, g, b);
        }
        bitmap = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888);

ImageView in oncreate is defined as: oncreate中的ImageView定义为:

    imageView = (ImageView)findViewById(R.id.imgView);

and in Async task as: 在异步任务中为:

private class ImageTransfer extends AsyncTask<Void,Void,Bitmap> {

    public Bitmap bitmap1 = null;
    ImageView im_v = null;
    public ImageTransfer(ImageView view){
        this.im_v= view;
    }
    @Override
    protected Bitmap doInBackground(Void... params) {
        try {
            bitmap1 = doItOnServer();
        } catch (Exception e) {
            Log.v("Exception", e.getMessage());
        }
        return bitmap1;
    }

When I try to display the image in Async task it throws null pointer Exception 当我尝试在异步任务中显示图像时,它将引发空指针异常

protected void onPostExecute(Bitmap result) {
        try {
            if (bitmap1 != null) {
               im_v.setImageBitmap(result);
            } else {
                Log.v("Error reading bitmap", "error");
            }
        } catch (Exception e) {
            Log.e("OnPost Exec", "Exception", e);
        }
    }

Log captured for the caught exception is : 为捕获的异常捕获的日志为:

3166-3166/junaidyounas.makerprojectjava E/OnPost Exec﹕ Exception
java.lang.NullPointerException
        at junaidyounas.makerprojectjava.OpenCVSelecter$ImageTransfer.onPostExecute(OpenCVSelecter.java:639)
        at junaidyounas.makerprojectjava.OpenCVSelecter$ImageTransfer.onPostExecute(OpenCVSelecter.java:615)
        at android.os.AsyncTask.finish(AsyncTask.java:677)
        at android.os.AsyncTask.access$600(AsyncTask.java:177)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:690)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:149)
        at android.app.ActivityThread.main(ActivityThread.java:5045)
        at java.lang.reflect.Method.invokeNative(Native Method).....

I just fixed code but I think you should post method doItOnServer(): 我只是固定了代码,但我认为您应该发布方法doItOnServer():

protected void onPostExecute(Bitmap result) {
        try {
            if (result != null) {
               im_v.setImageBitmap(result);
            } else {
                Log.v("Error reading bitmap", "error");
            }
        } catch (Exception e) {
            Log.e("OnPost Exec", "Exception", e);
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM