2013-02-01 70 views
1

我對android很新穎。我想將圖像保存到內部存儲器,稍後從內部存儲器中檢索圖像並將其加載到圖像視圖。我已經使用以下代碼成功地將圖像存儲在內部存儲器中:從內部存儲器讀取圖像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); 

但是,我得到一個空指針異常。

我檢查的文件是存在的內部存儲器中的路徑:

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

我在做什麼錯了,請幫我出這一點。我經歷了很多堆棧問題。

回答

2

這是因爲你的字節數組爲空,實例化它,並分配大小。

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

幫助 - 傑森羅賓遜

+1

['available()'](http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html#available%28%29)方法是估計值。您可以使用['File.length()'](http://developer.android.com/reference/java/io/File.html#length%28%29)找到更可靠的字節數。 –

+0

哇!這正是問題所在。謝了哥們!!你讓我今天一整天都感覺很好!我需要刷新核心的Java概念!再次感謝!! –

+0

@ user1566160耶歡迎:)請記住傑森提到的,我即將告訴你可用不給出確切的大小,它只是一個估計值,或者可以是小文件大小的臨時解決方案。 – AAnkit

相關問題