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

标签 android image file storage

我是 android 的新手。我想将图像保存到内部存储器中,稍后从内部存储器中检索图像并将其加载到 ImageView 中。我已经使用以下代码成功地将图像存储在内部存储器中:

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

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

最佳答案

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

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

帮助者 - Jason Robinson

关于android - 从内部存储器读取图像android给出空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14641073/

相关文章:

java - 移动背景 Android

css - CSS 生成的图标之间的毛发不明

php - 获取图像尺寸

html - img 缩放到 div 内的视口(viewport)

c++ - 测试文件是否具有所需权限的好方法是什么?

java - 使用java将文本格式应用于CSV文件

android - 我们可以在 1 个移动应用程序中制作 2 个侧边栏抽屉导航吗?

android - 有没有办法处理表面的触摸事件?

c - 为什么“while(!feof(file))”总是错误的?

android - 是否可以根据 wifi 信号强度确定 iPhone 或 Android 设备的位置?