Android在编码

时间:2017-07-21 14:10:04

标签: android json base64

我认为当我将图像编码为base 64并尝试通过JSON发送时,我得到了一个奇怪的编码错误。

我对以这样的位图开头的照片进行编码:

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            photo.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
            byte[] byteArray = byteArrayOutputStream .toByteArray();
            encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);

然后我发送"编码" json上的字符串

            JSONObject postDataParams = new JSONObject();

            postDataParams.put(ArchivoTexto, encoded);

现在我看到的问题是,当我向JSON发送编码字符串时,控制台说它发送的东西看起来像这样:

\/9j\/4AAQSkZJRgABAQAAAQABAAD\/2wB

但是如果我复制到剪贴板中,那么"编码"字符串看起来像这样:

/9j/4AAQSkZJRgABAQAAAQABAAD/2wB 

反斜杠消失,如果我使用网站解码来自剪贴板的字符串,它会成功解码图像,但是当我通过JSON将字符串发送到服务器时,它看起来很破碎,所以我怀疑反斜杠让它破裂。

我的问题是,我是否应该寻找一种方法来在JSON上发送字符串之前删除反斜杠,或者是因为无法正确解释字符串而导致服务器出错?

1 个答案:

答案 0 :(得分:0)

上传图片我这样做:

VolleyMultipartRequest multipartRequest = new VolleyMultipartRequest(Request.Method.POST, G.SET_AVATAR_URL, new Response.Listener<NetworkResponse>() {
  @Override
  public void onResponse(NetworkResponse response) {

  }
}, new Response.ErrorListener() {
  @Override
  public void onErrorResponse(VolleyError error) {
  }
}) {
  @Override
  protected Map<String, DataPart> getByteData() {
    Map<String, DataPart> params = new HashMap<>();
    params.put("avatar", new DataPart("file_avatar.jpg", AppHelper.getFileDataFromDrawable(getBaseContext(), img_user.getDrawable()), "image/jpeg"));
    return params;
  }
};

VolleySingleton.getInstance(getBaseContext()).addToRequestQueue(multipartRequest);

}

这是AppHelper类:

    public class AppHelper {

  /**
   * Turn drawable resource into byte array.
   *
   * @param context parent context
   * @param id      drawable resource id
   * @return byte array
   */
  public static byte[] getFileDataFromDrawable(Context context, int id) {
    Drawable drawable = ContextCompat.getDrawable(context, id);
    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 0, byteArrayOutputStream);
    return byteArrayOutputStream.toByteArray();
  }

  /**
   * Turn drawable into byte array.
   *
   * @param drawable data
   * @return byte array
   */
  public static byte[] getFileDataFromDrawable(Context context, Drawable drawable) {
    Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutputStream);
    return byteArrayOutputStream.toByteArray();
  }
}

这是VolleyMultipartRequest的链接:Link github