android - 改造 API 以检索 png 图像

标签 android retrofit

您好,我是 Android 的 Retrofit 框架的新手。我可以使用它从 REST 服务获得 JSON 响应,但我不知道如何使用改造下载 png。我正在尝试从此网址下载 png: http://wwwns.akamai.com/media_resources/globe_emea.png . 应该在 Callback<> 中指定什么响应对象来实现这一点。

最佳答案

当然我们通常使用 Picasso 来加载图片,但有时我们确实需要使用 Retrofit 来加载特殊图片(例如获取验证码图片),您需要添加一些请求头,从响应头中获取一些值(当然你也可以使用Picasso + OkHttp,但是在一个项目中你已经使用Retrofit来处理大部分网络请求),所以这里介绍如何通过Retrofit 2.0实现。 0(我已经在我的项目中实现了)。

关键是你需要使用okhttp3.ResponseBody来接收响应,否则Retrofit会将响应数据解析为JSON,而不是二进制数据。

代码:

public interface Api {
    // don't need add 'Content-Type' header, it's useless
    // @Headers({"Content-Type: image/png"})
    @GET
    Call<ResponseBody> fetchCaptcha(@Url String url);
}

Call<ResponseBody> call = api.fetchCaptcha(url);
call.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            if (response.isSuccessful()) {
                if (response.body() != null) {
                    // display the image data in a ImageView or save it
                    Bitmap bmp = BitmapFactory.decodeStream(response.body().byteStream());
                    imageView.setImageBitmap(bmp);
                } else {
                    // TODO
                }
            } else {
                // TODO
            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
            // TODO
        }
    });

关于android - 改造 API 以检索 png 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25462523/

相关文章:

android - Android 中的上游消息传递

android - 有没有办法为应用程序( native 或混合)创建指纹扫描仪?

android - 具有多个 View 同步问题的滑动动画

android - 如何在改造中使用@Part 传递 header ?

java - Retrofit - JSON 数组解析

android - 使用 Retrofit 刷新 OAuth token 而不修改所有调用

java - 我在 Retrofit 中得到奇怪的响应,协议(protocol)=http/1.1,代码=200

android - 如何在没有 OutOfMemoryError 的情况下填充图像 ListView

java - ava.lang.ClassCastException : android. support.v7.widget.AppCompatTextView 无法转换为 android.widget.EditText

android - 使用 RX 和 Kotlin 组合网络请求