2012-01-04 56 views
7

繼承人我的情況:正從字節數組圖像中JSON對象Android應用

我有我的服務器上運行一個RESTful WCF服務,該服務是爲了獲得各種類型的數據約人從數據庫和品牌該數據可作爲單個JSON對象提供。它很棒!

[編輯]還有一種服務在服務器上的文件系統中維護圖像緩存。當向RESTful服務發送請求時,該服務會從圖像服務請求圖像。如果圖像已經在緩存中(與請求的寬度,高度和人物相同),則返回(作爲字節數組)。我們必須使用此服務來檢索圖像。

現在我想要的是那個人的形象。在我們的數據庫中,圖像是一個很長的原始(ew)。但是,我已經處理了這個問題(前一段)。該圖像現在是一個字節數組。我對android非常陌生,我不確定檢索這個圖像的最佳方式是什麼。我想我可以做的是將字節數組添加到JSON對象,然後使用base64解碼器將其轉換爲可繪製的圖像。然而,每次我嘗試時,它都會超時並告訴我期望','或']'在JSON對象的char緩衝區的任意索引處。

我已經能夠從JSON對象中抽出一小部分數據而沒有問題,但現在有一個巨大的字節數組,JSONObject恨我。從我的服務中獲取此圖像的更好方法是什麼?

回答

10
  1. Base64對字節數組進行編碼以獲取字符串。
  2. 將字符串添加到JSON對象併發送。
  3. 收到JSON後,取出字符串。
  4. Base64將其解碼以獲取字節數組。
  5. 使用字節數組來創建圖像。
+0

我相信這就是我一直在尋找。 – 2012-01-04 23:14:12

+0

我相信這是更好的方法:http://stackoverflow.com/a/15929125/245460 – 2013-04-10 14:48:36

0

storing images上查看此問題,最好將這類數據存儲在文件系統上。如果可能,請棄用該字段,並創建一個腳本將現有圖像移至文件系統。

然後,您應該將圖像存儲在可以通過URL檢索的文件系統(或某種內容管理系統)上。

然後將該URL存儲在數據庫中。然後你可以發送你的json對象。

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

當客戶端收到此消息時,它會調用該URL並下載圖像。

您的客戶將不得不單獨調用以檢索圖像,但它通常比用二進制數據填充數據庫要好。如果您希望快速顯示數據,同時允許在後臺下載圖像,這也可以發揮您的優勢。

+0

不完全是我的意思,我試圖澄清更多。檢查我的編輯。 – 2012-01-04 23:12:42

0
比使用Base64編碼更好

是返回流(從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; 
}