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

inheritance人我的情况:

我有一个运行在我的服务器上的RESTful WCF服务,这个服务是为了从数据库中获取关于人们的各种types的数据,并且把这些数据作为一个JSON对象来提供。 这很好用!

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

现在我想要的是那个人的形象。 在我们的数据库中,图像是一个很长的原始(ew)。 不过,我已经处理了这个问题(前一段)。 该图像现在是一个字节数组。 我很新的Android,我不知道什么是检索这个图像的最佳方式是。 我想我可以做的是将字节数组添加到JSON对象,然后使用base64解码器将其转换成可绘制的图像。 然而,每次我尝试,它超时,并告诉我预期','或']'在JSON对象的字符缓冲区的任意索引。

我已经能够从JSON对象中提取less量的数据,但是现在有一个巨大的字节数组,JSONObject恨我。 从我的服务中获得这个图像会更好吗?

Solutions Collecting From Web of "从JSON对象中的字节数组中获取图像到android应用程序"

  1. Base64编码字节数组得到一个string。
  2. 将string添加到JSON对象并发送。
  3. 收到JSON后,取出string。
  4. Base64将其解码以获取字节数组。
  5. 使用字节数组来创build图像。

在存储图像时看到这个问题,最好将这种数据存储在文件系统上。 如果可能,请弃用该字段,并创build一个脚本将现有图像移至文件系统。

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

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

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

当客户收到这个时,它会打电话给这个URL并下载图像。

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

比使用Base64编码更好的是这种返回stream(从WCF RAW编程 )

[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; }
[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; }