将图像从JSON对象中的字节数组获取到Android应用程序

时间:2012-01-04 21:55:24

标签: android wcf json

继承我的情况:

我的服务器上运行了RESTful WCF服务,该服务旨在从数据库中获取有关人员的各种类型的数据,并使这些数据作为单个JSON对象可用。它很棒!

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

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

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

3 个答案:

答案 0 :(得分:10)

  1. Base64对字节数组进行编码以获取字符串。
  2. 将字符串添加到JSON对象并发送。
  3. 收到JSON后,取出字符串。
  4. Base64对其进行解码以返回字节数组。
  5. 使用字节数组创建图像。

答案 1 :(得分:0)

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

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

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

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

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

您的客户端必须单独调用以检索图像,但通常比使用二进制数据填充数据库更好。如果您希望快速显示数据,同时允许在后台下载图像,这也可以发挥作用。

答案 2 :(得分:0)

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