2016-01-22 53 views
0

餵我與Android合作。我想將多個捕獲的圖像保存在一個文件夾中(以編程方式在設備的內部存儲器中創建),並從該文件夾讀取該文件並以多部分形式發送到服務器。我用下面的代碼以圖片爲multipart,的Android java.io.FileNotFoundException圖像打開失敗:從內部存儲ENOENT

for(int i=0;i<Captured_imagePath.size();i++) { 
    try { 
     final File file2 = new File(android.os.Environment.getExternalStorageDirectory() + "/MyFolder/" + Captured_imagePath.get(i)); 

     final FileBody fileBody = new FileBody(file2); 
     entityBuilder.addPart(file2.getName(), fileBody); 
     entityBuilder.setBoundary(boundary); 
    } catch (Exception e) { 
     Log.i(TAG, "Except:: " + e.toString()); 
    } 
} 

當我在這個循環中正常工作只用一個形象。當一個以上的圖像,它會導致以下異常

8594-9144/? W/System.err﹕ java.io.FileNotFoundException: /storage/sdcard0/MyFolder/ 20160123_121858.jpg: open failed: ENOENT (No such file or directory) 
01-23 12:19:09.525 8594-9144/? W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
01-23 12:19:09.525 8594-9144/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
01-23 12:19:09.525 8594-9144/? W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
01-23 12:19:09.525 8594-9144/? W/System.err﹕ Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory). 

我添加的權限在清單

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

我的完整multpart上傳方法是

public String uploadMultipart(String url,String json ,ArrayList<String> imagePath,ArrayList<String> Captured_imagePath) { 
     String result=""; 
     File file=null; 
     String boundary = "-------------" + System.currentTimeMillis(); 



     try 
     { 
      HttpClient client = new DefaultHttpClient(); 
      HttpPost post = new HttpPost(url); 

      MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); 
      entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 

      entityBuilder.addTextBody("json", json); 
      entityBuilder.setBoundary(boundary); 
      if(imagePath.size()!=0) 
      { 
       file = new File(android.os.Environment.getExternalStorageDirectory() + "/MyFolder/" + imagePath.get(0)); 

       entityBuilder.addBinaryBody(file.getName(), file, ContentType.create("image/jpeg"), imagePath.get(0)); 

       entityBuilder.setBoundary(boundary); 
      } 

      if(Captured_imagePath.size()!=0) 
      { 

       for(int i=0;i<Captured_imagePath.size();i++) 
       { 

        try { 


         final File file2 = new File(android.os.Environment.getExternalStorageDirectory() + "/MyFolder/" + Captured_imagePath.get(i)); 



         final FileBody fileBody = new FileBody(file2); 
         entityBuilder.addPart(file2.getName(), fileBody); 
         entityBuilder.setBoundary(boundary); 

        }catch (Exception e) 
        { 
         Log.i(TAG, "Except:: " + e.toString()); 
        } 

       } 


      } 


      HttpEntity entity = entityBuilder.build(); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      entity.writeTo(bytes); 
      String content = bytes.toString(); 

     // Log.i(TAG,"sending data"+content); 
      // writeToFile("shanu",content); 

      post.setEntity(entity); 
      HttpResponse response = client.execute(post); 
      HttpEntity httpEntity = response.getEntity(); 
      result = EntityUtils.toString(httpEntity); 
      Log.i(TAG2, result); 
     } 
     catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 
     return result.toString(); 

我已經搜查了該文件在我的文件夾手動和它存在於同一個文件夾。那麼爲什麼我得到這個文件沒有發現異常?我該如何解決這個問題?請幫忙。

+0

你怎麼樣比加載一個圖像更加的循環?需要他的代碼來驗證 – Stallion

+2

有可能是'MyFolder中/'即/存儲/ sdcard0/MyFolder中/ 20160123_121858.jpg後的空間。這是造成這個問題的原因。 –

+0

@Harry:這裏Captured_imagePath是圖像名稱的ArrayList和循環高達ArrayList的大小和每個項目的重視entityBuilder內循環。這是一個錯誤的做法? – UserAndroid

回答

4

您的路徑中多餘的空白。

嘗試用這種

file = new File(android.os.Environment.getExternalStorageDirectory() + "/MyFolder/" + imagePath.get(0).toString().trim()); 
相關問題