2012-01-04 38 views
7

Heres tình hình của tôi:nhận hình ảnh từ mảng byte trong đối tượng JSON để ứng dụng android

Tôi có một dịch vụ WCF RESTful chạy trên máy chủ của tôi, dịch vụ có nghĩa là để có được các loại dữ liệu khác nhau về con người từ một cơ sở dữ liệu và làm cho dữ liệu đó có sẵn dưới dạng một đối tượng JSON. Nó hoạt động tuyệt vời!

[EDIT] Có một dịch vụ khác duy trì bộ nhớ cache hình ảnh trong hệ thống tệp trên máy chủ. Khi một yêu cầu được gửi đến dịch vụ RESTful, dịch vụ đó sau đó yêu cầu một hình ảnh từ dịch vụ hình ảnh. Nếu hình ảnh đã có trong bộ đệm (cùng chiều rộng, chiều cao và người như yêu cầu), nó sẽ trả về (như một mảng byte). Chúng tôi PHẢI sử dụng dịch vụ này để truy xuất hình ảnh.

Bây giờ những gì tôi muốn là hình ảnh của người đó. Trong cơ sở dữ liệu của chúng tôi, hình ảnh là một nguyên dài (ew). Tuy nhiên, tôi đã xử lý vấn đề đó (đoạn trước). Hình ảnh bây giờ là một mảng Byte. Tôi khá mới với android và tôi không chắc cách tốt nhất để lấy hình ảnh này là gì. Những gì tôi nghĩ rằng tôi có thể làm là thêm mảng byte vào đối tượng JSON và sau đó sử dụng bộ giải mã base64 để chuyển đổi nó thành một hình ảnh có thể kéo được. Tuy nhiên, mỗi lần tôi thử, nó lại hết giờ và cho tôi biết nó được mong đợi ',' hoặc ']' ở một số chỉ số tùy ý của bộ đệm char cho đối tượng JSON.

Tôi đã có thể kéo các bit nhỏ dữ liệu ra khỏi đối tượng JSON mà không gặp vấn đề gì, nhưng bây giờ có một mảng byte lớn trong đó, JSONObject ghét tôi. Điều gì sẽ là một cách tốt hơn để có được hình ảnh này từ dịch vụ của tôi?

Trả lời

10
  1. Base64 mã hóa mảng byte để nhận chuỗi.
  2. Thêm chuỗi vào đối tượng JSON và gửi nó.
  3. Khi nhận được JSON, hãy lấy chuỗi ra.
  4. Base64 giải mã nó để lấy lại mảng byte.
  5. Sử dụng mảng byte để tạo Hình ảnh.
+0

Tôi tin rằng đó là những gì tôi đang tìm kiếm. –

+0

Tôi tin rằng đó là cách tốt hơn: http://stackoverflow.com/a/15929125/245460 –

0

Xem câu hỏi này trên storing images, tốt hơn hết là lưu trữ loại dữ liệu này trên hệ thống tệp. Nếu có thể không dùng nữa trường đó và tạo tập lệnh để di chuyển hình ảnh hiện có sang hệ thống tệp.

Sau đó, bạn nên lưu trữ hình ảnh trên hệ thống tệp (hoặc một số loại hệ thống quản lý nội dung) có thể được truy xuất bằng URL.

Sau đó lưu trữ URL trong cơ sở dữ liệu. bạn có thể gửi nó vào đối tượng json của bạn.

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

Khi khách hàng nhận được thông báo này, họ sẽ thực hiện cuộc gọi đến URL đó và tải xuống hình ảnh.

Khách hàng của bạn sẽ phải thực hiện cuộc gọi riêng để truy xuất hình ảnh nhưng thường tốt hơn là điền vào cơ sở dữ liệu của bạn bằng dữ liệu nhị phân. Điều này cũng có thể làm việc với lợi thế của bạn nếu bạn muốn hiển thị dữ liệu nhanh trong khi cho phép hình ảnh được tải xuống dưới nền.

+0

Không chính xác những gì tôi có ý nghĩa, tôi đã cố gắng làm rõ thêm một chút. Kiểm tra chỉnh sửa của tôi. –

0

Tốt hơn so với sử dụng mã hóa Base64 là cách này trở về Stream (từ 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; 
} 
 
Các vấn đề liên quan