在android中发布BASE64图像时发生java.lang.OutOfMemoryError

在android中发布BASE64图像时发生java.lang.OutOfMemoryError,android,json,base64,bitmapimage,android-image,Android,Json,Base64,Bitmapimage,Android Image,我在下面的代码中遇到内存不足的异常 try { String strBase64 = BitMapToString(bitmap); bitmap.recycle(); JSONObject data = new JSONObject(); data.put("image_data", strBase64.toString()); data.put("uploadedBy", "1"); Log.i("JSON DATA", data.toStri

我在下面的代码中遇到内存不足的异常

try {
    String strBase64 = BitMapToString(bitmap);
    bitmap.recycle();
    JSONObject data = new JSONObject();
    data.put("image_data", strBase64.toString());
    data.put("uploadedBy", "1");
    Log.i("JSON DATA", data.toString());
    HttpClient httpClient = new DefaultHttpClient();
    String url = "http://**.**.***.***:91/bisqup/index.php?r=ws/AddAppImage";
    HttpPost httpPost = new HttpPost(url);
    List<NameValuePair> parameters = new ArrayList<NameValuePair>();
    parameters.add(new BasicNameValuePair("data", data.toString()));
    httpPost.setEntity(new UrlEncodedFormEntity(parameters));
    HttpResponse response = httpClient.execute(httpPost);
    BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    String json = reader.readLine();
    JSONTokener tokener = new JSONTokener(json);
    JSONObject finalResult = new JSONObject(tokener);
    Log.i("Response", "" + finalResult.toString());
} catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
}

public String BitMapToString(Bitmap bitmap) {
    try {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
        byte[] b = baos.toByteArray();
        String temp = Base64.encodeToString(b, Base64.DEFAULT);
        baos.close();
        baos = null;
        Log.i("BASE64", temp);
        return temp;
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
}
有人能告诉我为什么这段代码会引起内存问题吗


如果您有任何建议,我们将不胜感激。

当您将
位图读入
字符串时,它很可能太大,这就是为什么会出现
OutOfMemory
异常的原因。对于此类请求,您应该使用
多部分post
,并使用
文件体
而不是
字符串
。您可以查看更多详细信息。

尝试在不使用JSONObject类的情况下生成JSON对象,这似乎相当简单,因此只需构建字符串即可

String data = "{ image_data: \"" + strBase64.toString() + "\", uploadedBy: \"1\" }";

第134行日志是在post之前还是之后?在任何情况下,使用基于流的json编写器以及基于流的base64编码器这是在json中对象较少的情况下最简单的方法。谢谢。我可以使用多部分POST,但是在web服务方面,它不是为多部分设计的,所以它不能获取我的多部分POST。这是web服务的局限性。但是,是的,多部分是这个问题的解决方案,这很好,我完全同意你的看法。
String data = "{ image_data: \"" + strBase64.toString() + "\", uploadedBy: \"1\" }";