【问题标题】:Image with picasso and Json parameter in AndroidAndroid中带有毕加索和Json参数的图像
【发布时间】:2015-08-23 20:01:03
【问题描述】:

我有一个休息服务器,我需要用毕加索下载图像。 我需要将 json 参数传递给休息服务器方法。那个休息服务器方法是这样的:

休息服务器方法:

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 参数的选项。

问候,路易斯

【问题讨论】:

    标签: java android json rest picasso


    【解决方案1】:

    你看不到一个,因为没有一个。这是有充分理由的。 Picasso 使用URI 作为缓存的键来确定它是否需要再次加载给定的图像。将请求发送到具有不同负载的相同 URI 会导致缓存出现问题。很可能,您会看到所有图像都是相同的——首先加载的是哪个图像。如果您的服务器支持将参数作为查询参数而不是 JSON 负载发送,例如 http://myserver.place/GetServerBitmap/?nr=imageparam,那么 picasso 将为您工作,因为它完全适合 URI

    如果您实现自定义 Downloader 以将 URI 解压缩到 JSON 有效负载中,您将能够从 Picasso 中获得您想要的行为。

    【讨论】:

    • 谢谢。这是一个很好的答案。但是我迷失了如何在 Picasso 中使用 json 参数进行自定义下载。我在网上搜索过,但没有毕加索的样本。
    • 其余服务器不是我的有下一个要求。例如,如果 serverf 函数是(delphi 中的代码): function TServerMethods1.EchoAttribute(Key: String; Obj: TJSONObject): String;服务端要求说:“如果你想在请求内容中传递多个参数值,那么你需要把它们按正确的顺序放在一个 JSON 数组中,并使该数组成为一个 JSON 对象对的值,用key "_parameters"。生成的 JSON 对象应表示为字符串并设置为请求的内容,如下所示:{"_parameters":["Param1", "Param2"]}
    • 请求示例:POST /datasnap/rest/TServerMethods1/EchoAttribute/Attr1 HTTP/1.1 ....*附加标头*...接受:application/json 内容类型:text/plain ;charset=UTF-8 {"Attr1":"ValueToReturn"}
    • 使用 PHP: "AX" , "id" => 1 , "fields" => array ( "FId" => 4 , " FD" => "LI" ) ); $url = 'localhost:8080/restserv/%22AddCid%22' ; $ch = curl_init() ; curl_setopt( $ch , CURLOPT_HTTPHEADER, array ( "Accept: application/json" , "Content-Type: text/xml; charset=utf-8" ) ) ; curl_setopt( $ch , CURLOPT_HEADER , FALSE ) ; curl_setopt( $ch , CURLOPT_RETURNTRANSFER , true ) ; curl_setopt( $ch , CURLOPT_POST , TRUE ) ; curl_setopt( $ch , CURLOPT_URL , $url ) ; curl_setopt( $ch , CURLOPT_POSTFIELDS , json_encode( $cid) ) ; $result = curl_exec($ch); ?>
    猜你喜欢
    • 2017-05-17
    • 2017-06-15
    • 2018-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多