2015-08-23 27 views
-1

我有一臺休息服務器,我需要使用畢加索的下載圖像。 我需要傳遞一個json參數來休息服務器方法。那其餘服務器的方法是什麼爲:帶有畢加索和Json參數的Android圖片

REST服務器的方法:

public Bitmap GetServerBitmap(Jsonobject param){ 
    Bitmap bitmap=get_bitmap(); 
    return bitmap; 
} 

Android客戶端的方法: 在這裏,我需要的代碼的例子,呼籲其餘服務器法以行「MyGetServerBitmap」。

private void downloadimage(final int nr) { 
    String url = Common.getServerURL() + "\"GetServerBitmap\""; 
    JSONArray ja = new JSONArray(); 

    ja.put(nr); 

    JSONObject jsonBody = new JSONObject(); 
    try { 
     jsonBody.put("_parameters", ja); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    //will return a bitmap from rest server 
    Bitmap mybitmap=MyGetServerBitmap(url, jsonBody); I need a code using picasso to do it 
} 

我該如何編碼這個「MyGetServerBitmap」方法?

我已經試了下:

private Bitmap MyGetServerBitmap(String url, JsonObject jsonBody){ 
Bitmap bmp; 
//Where I pass json parameter in picasso? 
Picasso.with(this) 
    .load(url) 
    .error(R.drawable.image_name) 
    .into(bmp); 
    return bmp; 
} 

,但我看不到任何選項傳遞JSON參數。

問候,路易斯

回答

1

你沒有看到一個,因爲沒有一個。這是一個很好的理由。畢加索使用URI作爲緩存的關鍵字,以確定是否需要再次加載給定的圖像。將請求發送到具有不同有效負載的相同URI會導致緩存問題。很有可能,你會看到所有的圖像都是相同的 - 哪一個是先加載的。如果您的服務器支持將參數作爲查詢參數而不是JSON有效內容發送(如http://myserver.place/GetServerBitmap/?nr=imageparam),則畢加索將爲您工作,因爲它適合整齊地放在URI中。

如果您實施自定義Downloader以將URI解壓縮到JSON有效內容中,您將能夠從Picasso獲得想要的行爲。

+0

謝謝。這是一個很好的答案。但我失去了如何用畢加索的json paremeters做自定義下載。我在網上搜索,但沒有與畢加索樣本。 –

+0

其餘服務器不是我的,有下一個要求。例如,如果serverf函數是(在delphi中的代碼):function TServerMethods1.EchoAttribute(Key:String; Obj:TJSONObject):String;服務器需求說:「如果你想在請求內容中傳遞多個參數值,那麼你需要按照正確的順序將它們放入一個JSON數組中,並且使該數組成爲JSON對象的值,鍵「_parameters」。生成的JSON對象應該被表示爲一個字符串並設置爲請求的內容,如下所示: {「_parameters」:[「Param1」,「Param2」]} –

+0

請求示例: POST/datasnap/rest/TServerMethods1/EchoAttribute/Attr1 HTTP/1.1 .... *附加標題* ... Accept:application/json Content-Type:text/plain; charset = UTF-8 {「 Attr1「:」ValueToReturn「} –