2016-05-31 4 views
0

Ich bin 3 Bilder (jeweils 4,8 MB) anhängen und auf dem Server veröffentlichen. Während der Bearbeitung des 3. Bildes bekomme ich den "OutOfMemorryError". Unten ist das Code-Snippet, wo ich den obigen Fehler erhalte.Wie OutOfMemoryError Ausnahme beim Senden der großen Bilder an den Server in Android

dos.write(buffer, 0, bufferSize); 

Ich bin vor der execption nur in der Anmerkung 2, OS-Version 4.4.2

Unten ist der komplette Code-Schnipsel zur Verarbeitung von Bildern geschrieben.

for (int i = 0; i < attachmentUri.size(); i++) { 
    String fileName ="attachment"+(i+1); 
    File file = new File(attachmentUri.get(i)); 
    if (file.exists()) { 
     dos.writeBytes("--" + Constants.IMAGE_BOUNDRY + LINE_FEED); 
     uploadAttachments(dos, fileName,attachmentUri.get(i), LINE_FEED); 
    } else { 
     Log.i("Attachment not found"); 
    } 
} 

void uploadAttachments(DataOutputStream dos,String filename,String filePath,String lineEnd) { 
    int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    try { 
     FileInputStream inputStream = new FileInputStream(filePath); 
     dos.writeBytes("Content-Disposition: form-data; name=\""+ filename + "\";filename=\""+ (filePath.substring(filePath.lastIndexOf("/")+1)) + "\"" + lineEnd + "Content-Type: image/jpeg; charset=UTF-8" + lineEnd); 
     dos.writeBytes(lineEnd); 
     bytesAvailable = inputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     buffer = new byte[bufferSize]; 
     bytesRead = inputStream.read(buffer, 0, bufferSize); 
     while (bytesRead > 0) { 
      dos.write(buffer, 0, bufferSize); 
      bytesAvailable = inputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      bytesRead = inputStream.read(buffer, 0, bufferSize); 
     } 
     dos.writeBytes(lineEnd); 
     inputStream.close(); 
    } catch (IOException ioe){ 
     Log.e(e.getMessage()); 
    } 
} 

Wie wird das Problem gelöst?

+0

Erhöhung MaxBufferSize = 5 * 1024 * 1024 von MaxBufferSize insted = 1 * 1024 * 1024 –

+0

@sachi Sie Verbindungscode zu teilen .... !!! –

+0

httpURLConnection.setChunkedStreamingMode (1024); und versuchen Sie auch diese Antwort auf stackoverflow ... http: //stackoverflow.com/a/9630475/3678308 –

Antwort

1

diese Antwort Versuchen Sie, auf stackoverflow

URLConnection connection = _url.openConnection(); 
     HttpsURLConnection httpConnection = (HttpsURLConnection) connection; 
     httpConnection.setConnectTimeout(45000); 
     httpConnection.setReadTimeout(45000); 
     httpConnection.setChunkedStreamingMode(1024); 
     httpConnection.setDoOutput(true); 
     httpConnection.setDoInput(true); 
     httpConnection.setRequestMethod("PUT"); 
     httpConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + Constants.IMAGE_BOUNDRY); 
     httpConnection.connect(); 
Verwandte Themen