2012-04-03 2 views
1

Я загрузка изображения на сервер с помощью base64 его работы хорошо, если изображение является небольшим, но если изображение большое, он дает мне память из исключенияизображения Android загрузить на сервер с помощью base64

try { 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     bitmap.recycle(); 
     byte[] byteArray = stream.toByteArray(); 
     stream.close(); 
     stream = null; 
     String ba1 = Base64.encodeToString(byteArray, Base64.DEFAULT); 

     bitmap = null; 
     System.gc(); // immediately free bitmap 

     byteArray = null; 
     System.gc(); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost(Data.upload_photo); 

     JSONObject jsonObj = new JSONObject(); 
     jsonObj.put("user_id", LoginParser.id); 
     int cnt = ba1.length()/4; 
     System.out.println("cnt=>" + cnt); 
     jsonObj.put("image", ba1); 

     jsonObj.put("caption", edt_caption.getText().toString()); 
     // Create the POST object and add the parameters 

     /* 
     * StringEntity entity = new StringEntity(jsonObj.toString(), 
     * HTTP.UTF_8); System.out.println(entity); 
     * entity.setContentType("application/json"); 
     * httppost.setEntity(entity); 
     * 
     * HttpResponse response = httpclient.execute(httppost); 
     */ 

     StringEntity se = new StringEntity(jsonObj.toString()); 
     // se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, 
     // "application/json")); 
     se.setContentType("application/json"); 
     httppost.setEntity(se); 
     HttpResponse response = httpclient.execute(httppost); 

     String result = EntityUtils.toString(response.getEntity()); 
     System.out.println("=>=>" + result); 
     JSONObject jsonObject = new JSONObject(result); 
     if (jsonObject.getString("status").equals("success")) 
      return "success"; 
     else 
      return jsonObject.getString("message"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

ответ

3

Попробуйте этот код один раз.

ByteArrayOutputStream bao = new ByteArrayOutputStream(); 
bm.compress(Bitmap.CompressFormat.JPEG, 90, bao); 
byte[] ba = bao.toByteArray(); 
String ba1 = Base64.encodeBytes(ba); 
ArrayList <NameValuePair> nameValuePairs = new 
ArrayList <NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("image", ba1)); 
try { 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpPost httppost = new 
    HttpPost("URL STRING"); 
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
    HttpResponse response = httpclient.execute(httppost); 
    HttpEntity entity = response.getEntity(); 
    is = entity.getContent(); 
    //Toast.makeText(SignUpActivity.this, "Joining Failed", Toast.LENGTH_SHORT).show(); 
} catch (Exception e) { 
    Log.e("log_tag", "Error in http connection " + e.toString()); 
} 

Я могу помочь вам, если у вас есть какие-либо сомнения.

+0

Я использую тот же код, но все же его даю мне 'java.lang.OutOfMemoryError' –

Смежные вопросы