的Android上传图片使用服务器的base64

问题描述:

我使用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; 
} 

试试这个代码同时上传图像到服务器。

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' – 2013-03-19 12:20:37