【问题标题】:getting image from byte array in JSON object to android app从 JSON 对象中的字节数组获取图像到 android 应用程序
【发布时间】:2012-01-04 21:55:24
【问题描述】:

这是我的情况:

我的服务器上运行了一个 RESTful WCF 服务,该服务旨在从数据库中获取有关人员的各种类型的数据,并将这些数据作为单个 JSON 对象提供。效果很好!

[编辑]还有另一个服务在服务器上的文件系统中维护图像缓存。当请求发送到 RESTful 服务时,该服务会从图像服务请求图像。如果图像已经在缓存中(与请求相同的宽度、高度和人物),它将返回(作为字节数组)。我们必须使用此服务来检索图像。

现在我想要的是那个人的形象。在我们的数据库中,图像是一个很长的原始 (ew)。但是,我已经处理过这个问题(上一段)。该图像现在是一个字节数组。我对 android 很陌生,我不确定检索此图像的最佳方法是什么。我认为我可以做的是将字节数组添加到 JSON 对象,然后使用 base64 解码器将其转换为可绘制图像。但是,每次我尝试时,它都会超时并告诉我它在 JSON 对象的 char 缓冲区的某个任意索引处预期为 ',' 或 ']'。

我已经能够毫无问题地从 JSON 对象中提取少量数据,但是现在其中有一个巨大的字节数组,JSONObject 讨厌我。从我的服务中获取此图像的更好方法是什么?

【问题讨论】:

    标签: android wcf json


    【解决方案1】:
    1. Base64 编码字节数组得到一个字符串。
    2. 将字符串添加到 JSON 对象并发送。
    3. 收到 JSON 后,取出字符串。
    4. Base64 对其进行解码以获取字节数组。
    5. 使用字节数组创建图像。

    【讨论】:

    • 我相信这就是我要找的。​​span>
    【解决方案2】:

    storing images 上查看此问题,将此类数据存储在文件系统上总是更好。如果可能,请弃用该字段,并创建一个脚本以将现有图像移动到文件系统。

    然后,您应该将图像存储在可以通过 URL 检索的文件系统(或某种内容管理系统)中。

    然后将 URL 存储在数据库中。然后你可以在你的 json 对象中发送它。

    {
    ...
        image_url:<url from database>
    ...
    }
    

    当客户端收到此消息时,它将调用该 URL 并下载图像。

    您的客户将不得不单独调用来检索图像,但这通常比用二进制数据填充您的数据库要好。如果您想快速显示数据同时允许在后台下载图像,这也对您有利。

    【讨论】:

    • 不完全是我的意思,我试图澄清一点。检查我的编辑。
    【解决方案3】:

    比使用 Base64 编码更好的是这种返回 Stream 的方式(来自WCF RAW programming

    [OperationContract, WebGet] public Stream GetTestImage(Image image) { MemoryStream stream = new MemoryStream(); image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg); stream.Position = 0; WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; return stream; }

    【讨论】:

      猜你喜欢
      • 2010-12-07
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多