从内部内存android读取图像给出空指针异常

时间:2013-02-01 06:42:26

标签: android image file storage

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

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

但我得到一个Null指针异常。

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

/data/data/com.test/files/image.jpg

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

1 个答案:

答案 0 :(得分:2)

这是因为你的bytes数组是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:这是一个更好的解决方案,因为您正在阅读Image,

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

帮助 - 杰森罗宾逊