【问题标题】:Android - huge data in Base 64, how to handle itAndroid - Base 64 中的海量数据,如何处理
【发布时间】:2013-07-28 10:21:12
【问题描述】:

我有一个 Web 服务,它为我提供了一个 json,其中有一个名为“imagedata”的节点。它包含大量数据作为字符串。当我在浏览器中打印它时,它给了我有效的输入。 Base64 编码的字符串以 '=' 字符结尾。

我也在一个 html 页面中使用这个标签对其进行了测试,它工作得非常好。

<img src="data:image/png;base64,MY_BASE64_ENCODED_STRING"/>

这是我的代码;

StringBuilder b64 = new StringBuilder(dataObj.getString("imagedata"));
byte[] decodedByte = Base64.decode(b64.toString(), 0);
bitmap = BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);

请注意,此代码适用于较小的图像数据,但会在较大的图像数据上给出 bad-base64 异常

请帮帮我, 谢谢

【问题讨论】:

  • 任何异常堆栈跟踪?
  • 会建议使用 Base64.decode(dataObj.getString("imagedata"),0);直接
  • @Stacks28 仍然遇到同样的错误。 java.lang.IllegalArgumentException:bad base-64
  • 如何在后台下载它(如在您的浏览器中)
  • 我已经在 AsyncTask 中这样做了 @Nizam 问题是如何将其解码回位图?它只在大编码字符串中给我例外。

标签: java android json web-services base64


【解决方案1】:

为什么你的服务器给你base64编码? Base64 只是通信而不是编码图像。如果它用于编码,它将使您的图像文件大小更大。IllegalArgumentException 意味着您的图像编码格式不正确或无法解码。 在我的项目中,我现在使用 Base64 发送图像。但它会被多部分改变。但是当服务器转发给收件人时。它只是转发图像的网址。所以我可以用这个简单地处理图片的网址:

public static Image loadImage(String url)
{
    HttpConnection connection = null;
    DataInputStream dis = null;
    byte[] data = null;

    try
    {
        connection = (HttpConnection) Connector.open(url);
        int length = (int) connection.getLength();
        data = new byte[length];
        dis = new DataInputStream(connection.openInputStream());
        dis.readFully(data);
    }
    catch (Exception e)
    {
        System.out.println("Error LoadImage: " + e.getMessage());
        e.printStackTrace();
    }
    finally
    {
        if (connection != null)
            try
            {
                connection.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        if (dis != null)
            try
            {
                dis.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    }


    return Image.createImage(data, 0, data.length);
}

请注意此 J2ME 代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    相关资源
    最近更新 更多