5

我使用的代碼java.io.FileNotFoundException在android系統

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.gallery); 

    Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
    startActivityForResult(i, SELECT_PICTURE); 
} 

public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    Bitmap bitmap = null; 
    switch (requestCode) { 
    case SELECT_PICTURE: 
     if (resultCode == RESULT_OK) { 
      Uri selectedImage = imageReturnedIntent.getData(); 
      try { 
       bitmap = decodeUri(selectedImage); 
      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 
      MyApplicationGlobal.bitmap = bitmap; 
      MyApplicationGlobal.imageUri = selectedImage.toString(); 
      Log.v("selectedImage", "selectedImage: " + selectedImage.getPath()); 

      Intent intentUpload = new Intent(GalleryActivity.this, UploadActivity.class); 
      startActivity(intentUpload); 
      finish(); 
     } 
    } 

選擇從圖庫中的圖片,然後我試圖通過調用Web服務

MultipartEntity reqEntity = new MultipartEntity(); 
    try { 
     reqEntity.addPart("email", new StringBody(email)); 
     Log.v("in uploadImageUsingMultiPart", "imagePath: " + MyApplicationGlobal.imageUri); 
     reqEntity.addPart("name", new FileBody(new File(MyApplicationGlobal.imageUri))); 
     reqEntity.addPart("img_desc", new StringBody(img_desc)); 
     reqEntity.addPart("amount", new StringBody(amount)); 
     reqEntity.addPart("request_type", new StringBody("INSERT")); 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } 

來上傳圖片,但我越來越錯誤java.io.FileNotFoundException

登錄貓

java.io.FileNotFoundException: /content:/media/external/images/media/526 (No such file or directory) 
at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method) 
at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:239) 
at java.io.FileInputStream.<init>(FileInputStream.java:88) 
at org.apache.http.entity.mime.content.FileBody.writeTo(FileBody.java:100) 
at org.apache.http.entity.mime.HttpMultipart.doWriteTo(HttpMultipart.java:206) 
at org.apache.http.entity.mime.HttpMultipart.writeTo(HttpMultipart.java:224) 
at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:183) 
at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:97) 
at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:162) 
at org.apache.http.impl.conn.AbstractClientConnAdapter.sendRequestEntity(AbstractClientConnAdapter.java:272) 
at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:237) 
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:119) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:428) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
at com.network.GetJSONFomURL.getJSONSrtringFromUrl(GetJSONFomURL.java:53) 
at com.network.WebServices.uploadImageUsingMultiPart(WebServices.java:73) 
at com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:127) 
at com.markphoto_activities.UploadActivity$MyAsyncTaskUploadImage.doInBackground(UploadActivity.java:1) 
at android.os.AsyncTask$2.call(AsyncTask.java:252) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574) 
at java.lang.Thread.run(Thread.java:1020) 
+0

您是否設置了允許外部存儲器寫入/讀取的權限? 「java.io.FileNotFoundException:/ content:/ media/external/images/media/526(沒有這樣的文件或目錄)」你無法讀取它 – 2012-12-27 11:59:39

+0

@matheszabi我已經添加了這行。夠了嗎? –

+0

也許這將幫助你:https://www.google.com/search?hl=en&source=hp&q=android+how+to+upload+image+from+gallery – 2012-12-27 12:12:59

回答

12

調用此方法,通過它的selectedUri,作爲回報,你會得到的路徑要

public String getPath(Uri uri) { 
    String[] projection = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = managedQuery(uri, projection, null, null, null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
+0

哇。這節省了我的一天。謝謝。沒辦法告訴烏里錯了。 – speedynomads

+2

我得到了例外: 存儲/模擬/ 0 /圖片/ PicCollage /照片2013-12-13 14_33_55.jpg:開放失敗:EACCES(權限被拒絕) –

+0

@IgorGanapolsky你有沒有要求[''android.permission.WRITE_EXTERNAL_STORAGE'] (https://developer.android.com/reference/android/Manifest.permission.html#WRITE_EXTERNAL_STORAGE)在您的清單?如果您的API級別爲23及以上,則還需要實施[運行時間權限](https://developer.android.com/training/permissions/requesting.html)。 – Bryan

17

只是一個因爲managedQuery更新已被棄用。

private String getPath(Uri uri) { 
    String[] data = { MediaStore.Images.Media.DATA }; 
    CursorLoader loader = new CursorLoader(context, uri, data, null, null, null); 
    Cursor cursor = loader.loadInBackground(); 
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 
+0

救世主! :D謝謝 – Marek