2017-08-28 131 views
-4

我從我的業務數據:FileNotFoundException異常:EACCES(拒絕)

 JSONObject userGuid = new JSONObject(); 
     userGuid.put("userGuid", id); 
     Bitmap bitmap = null; 
     String response = HttpUtil.post(mService + "GetUser", userGuid.toString(), mCookie); 

     JSONObject result = new JSONObject(response).getJSONObject("User"); 
     String temp = result.getJSONArray("UserImage").toString(); 
在接收到的數據

,有一個的Base64圖像的用戶,我得到了它,將其轉換爲arryByte,然後我將其轉換爲的InputStream

 byte[] tmp = Base64.decode(temp, Base64.DEFAULT); 
     InputStream is = new ByteArrayInputStream(tmp); 

我想將它寫入文件通過的OutputStream

OutputStream os = new FileOutputStream(f); 

,但我得到這個錯誤:

java.io.FileNotFoundException: /storage/emulated/0/fcImages/581864034: open failed: EACCES (Permission denied) 

在清單中,我添加這些權限:

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

什麼是你的主意嗎?

編輯 我以這種方式創建文件:

public class FileCache { 

private File cacheDir; 

public FileCache(Context context) { 

    if((Environment 
      .getExternalStorageState()).equals(Environment.MEDIA_MOUNTED)) { 
      cacheDir = new File(Environment.getExternalStorageDirectory(), "fcImages"); 
    } else { 
     cacheDir = context.getCacheDir(); 
    } 
    if(!cacheDir.mkdirs()) { 
     cacheDir.mkdirs(); 
    } 
} 

public File getFile(String id) { 
    String filename = String.valueOf(id.hashCode()); 
    File f = new File(cacheDir, filename); 
    return f; 
} 
+1

女巫Android操作系統的版本,你測試? –

+0

我正在使用API​​ 23 – sayres

+3

可能您需要閱讀本文。在嘗試「使用」它之前,你必須在代碼中請求許可:)。 https://developer.android.com/training/permissions/requesting.html –

回答

1

有3個東西,都在我的腦海檢查:

  1. 使用,許可標記,裏面明顯標記(和不是應用程序標籤)
  2. EACCESS可能由於fcImages目錄不存在或者它是文件
  3. 權限的Android API 23必須要求運行

來源:(1)這是answer,而源(3)是這個answer

+0

使用權限是我清單的一面:' <使用權限android:name =「android.permission.WRITE_EXTERNAL_STORAGE」 /> <使用的許可機器人:名稱= 「android.permission.INTERNET對」/> <應用 機器人:allowBackup = 「真」 機器人:圖標= 「@ mip映射/ ic_launcher」 機器人:標籤=「@ string/app_name「 android:roundIcon =」@ mipmap/ic_launcher_round「 android:supportsRtl =」true「 android:theme =」@ style/Theme.Design「> – sayres

+0

我不明白你是否解決了你的問題或者不。我對第二個原因很有信心(一個許可會拋出權限錯誤) –

+0

我有一個問題。我看到'fcImages'文件被創建 – sayres

0

如果你正在寫的文件,應用程序的內部存儲。試試這個:

例1:

java.io.File xmlFile = new java.io.File((getActivity() 
     .getApplicationContext().getFileStreamPath("FileName.xml") 
     .getPath())); 

也給下面的清單權限正確的方法:

例2:

<manifest> 
     <uses-permission 
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
     ... 
     <application> 
      ... 
      <activity> 
       ... 
      </activity> 
     </application> 
</manifest> 
相關問題