从内部存储器读取图像安卓给出空指针异常



我对安卓很陌生。我想将图像保存到内部存储器,然后从内部存储器中检索图像并将其加载到图像视图中。我已经使用以下代码成功地将图像存储在内部存储器中:

void saveImage() {
    String fileName="image.jpg";
    //File file=new File(fileName);
    try 
    {
       FileOutputStream fOut=openFileOutput(fileName, MODE_PRIVATE);
       bmImg.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
    }
    catch (Exception e) 
    {
       e.printStackTrace();
    }
}

保存使用此代码图像。但是当我尝试检索图像时,它给了我错误。用于检索图像的代码是:

FileInputStream fin = null;
        ImageView img=new ImageView(this);
        try {
            fin = openFileInput("image.jpg");
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        byte[] bytes = null;
        try {
            fin.read(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        }
        Bitmap bmp=BitmapFactory.decodeByteArray(bytes,0,bytes.length);
        img.setImageBitmap(bmp);

但是我得到一个空指针异常。

我检查了文件是否在内部存储器中的路径:

/data/

data/com.test/files/image.jpg

做错了什么,请帮我解决这个问题。我经历了很多堆栈问题。

这是因为您的字节数组为 null,请实例化它并分配大小。

 byte[] bytes = null;  // you should initialize it with some bytes size like new byte[100]
    try {
        fin.read(bytes);
    } catch (Exception e) {
        e.printStackTrace();
    }

编辑1:我不确定,但你可以做类似的事情

byte[] bytes = new byte[fin.available()]

编辑2:这是一个更好的解决方案,因为您正在阅读图像,

FileInputStream fin = null;
    ImageView img=new ImageView(this);
    try {
        fin = openFileInput("image.jpg");
        if(fin !=null && fin.available() > 0) {
            Bitmap bmp=BitmapFactory.decodeStream(fin) 
            img.setImageBitmap(bmp);
         } else {
            //input stream has not much data to convert into  Bitmap
          }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

帮助者 - 杰森·罗宾逊

相关内容

  • 没有找到相关文章