2013-08-06 91 views
1

首先,我權限保存/載入圖像/從本地存儲

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

我的方法來保存得到圖像:

private void saveIamgeToLocalStore(Bitmap finalBitmap) { 
     String root = Environment.getExternalStorageDirectory().toString(); 
     File myDir = new File(root + "/temp");  
     myDir.mkdirs(); 
     String fname = "Profile_Image.png"; 
     File file = new File (myDir, fname); 
     if (file.exists()) file.delete(); 
     try { 
      FileOutputStream out = new FileOutputStream(file); 
      finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); 
      out.flush(); 
      out.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void loadImageFromLocalStore(String imageURI) { 
     try { 
      Uri uri = Uri.parse(Environment.getExternalStorageDirectory().toString() + imageURI); 
      Bitmap bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri)); 
      profileImage.setImageBitmap(bitmap); 
      profileImage.setTag("Other"); 
      select_image_button.setText(R.string.button_remove_profile_picture); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 

用法:

saveIamgeToLocalStore(BitmapFactory.decodeFile(picturePath)); 
loadImageFromLocalStore("/temp/Profile_Image.png"); 

我得到一個

java.io.FileNotFoundException: No content provider: ... 

警告。

我錯過了什麼?

PS:圖像保存在/mnt/sdcard/temp/。加載圖像時出現警告。

+0

在 http://stackoverflow.com/questions/18010739/android-save-images-in-an-specific-folder/18010883#18010883 – mdDroid

回答

2

你的文件被保存了嗎?如果是,可能是在讀取文件之前沒有觸發mediascanner。由於mediascanner不會被觸發,因此內容提供商不會有進入 爲您的文件(文件不被索引)。在情況下,你的文件得到保存"saveIamgeToLocalStore",然後觸發從代碼mediascanner曾這樣:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri 
         .parse("file://" 
           + Environment.getExternalStorageDirectory()))); 

然後對文件進行讀取。它應該工作。

+0

只檢查我的回答用於存儲圖像您可以通過在保存並重新連接之後斷開設備來觸發媒體掃描儀來進行交叉檢查。然後只是嘗試加載,它會工作。 – Sushil

+0

感謝您的回答,但我仍然收到「java.io.FileNotFoundException:No content provider:」警告。是的,我的照片保存爲/mnt/sdcard/temp/Profile_Image.png。我已經嘗試了斷開連接和重新連接以及上面的代碼。 –

+1

事實證明,我需要將「file://」追加到文件路徑。 SendBroadcast沒有必要,但是你的帖子幫助我找到了問題,所以我接受了你的答案。 –

0

您需要寫入文件現有的檢查。那麼發現問題會更容易。 短例如

File test = new File (URI) 
if (test.exists()) 
{ 
    // do your computation 
} else 
{ 
    // find problem in file path 
}