【问题标题】:How to read a picture from an url that contains an auto-download picture on Android?如何从包含 Android 上自动下载图片的 url 中读取图片?
【发布时间】:2018-09-06 17:05:21
【问题描述】:

尝试在 UI 上显示来自自动下载链接的图片时遇到问题。 Picasso 和 Glide 不知道如何打开它。他们正在寻找地址。

例如,我有这张图片https://graph.facebook.com/10155174010491889/picture?type=large。当您访问该链接时,您会自动获得下载的图片。毕加索不知道如何处理这个问题。

我研究了这个问题(https://github.com/square/picasso/issues/463),应用了 OkHttpClient 和下载器,但还是不行:

OkHttpClient client = new OkHttpClient.Builder().build();
Downloader downloader = new OkHttp3Downloader(client);

        new Picasso.Builder(context)
                .downloader(downloader)
                .listener((picasso, uri, exception) -> {
                    exception.printStackTrace();
                    Log.d(TAG, "loadImageWithPicasso: " + exception);
                })
                .build()
                .load(Uri.parse(path))
                .centerCrop()
                .fit()
                .into(imageView, new Callback() {
                    @Override
                    public void onSuccess() {
                        imageView.setImageDrawable(ImageUtils.roundedCornersImage(context, imageView));
                    }

                    @Override
                    public void onError() {
                        imageView.setImageResource(resourceDrawable);
                    }
                });

我什至单独尝试对该图像发出 OkHTTP 请求并得到奇怪的结果 - 位图为空(尝试下载为位图时),网络响应重定向 url 大小为 0 的图像 (https://m.facebook.com/platform/profilepic/?asid=10155174010491889&height=200&width=200)

getRequest("https://graph.facebook.com/10155174010491889/picture?type=large", new okhttp3.Callback() {
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    Log.d(TAG, "body = " + response.body());
                    Log.d(TAG, "network response = " + response.networkResponse().toString());
                    InputStream inputStream = response.body().byteStream();
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);

                    Log.d(TAG, response.networkResponse().request().url() + " <<<<");

                }

                @Override
                public void onFailure(Call call, IOException e) {

                }

            });
        }
    }

    public static void getRequest(String url, okhttp3.Callback callback) {
        OkHttpClient client = new OkHttpClient.Builder().build();
        Request request = new Request.Builder()
                .url(url)
                .get()
                .build();
        client.newCall(request).enqueue(callback);
    }

我看到 Postman 使用简单的 GET 打开图片,没有暗示任何问题。

对于这种情况,您有什么建议可以解决?

【问题讨论】:

  • 我在我的一个项目中尝试了你的网址,Glide 加载它没有任何问题
  • @IonutJ.Bejan,你能分享一下小代码sn-p吗?我也尝试过使用 Glide,但没有成功。

标签: android picasso okhttp3 android-glide


【解决方案1】:

您的链接在 Glide 4.6.1

中完美运行
Glide.with(this)
     .load("https://graph.facebook.com/10155174010491889/picture?type=large")
     .into(imageview);

【讨论】:

  • @Nijunj,谢谢你的回答。正如我之前对 Ionut J. Bejan 所说,这是一种非常奇怪的行为。昨天我用 Picasso 和 Glide 测试了几个小时,我收到了这条消息“java.io.IOException:无法解码流”,现在一切正常,正如你所说。这肯定是脸书的问题。可能他们不时来。如果您觉得我的问题很有趣,可以点赞吗?
【解决方案2】:

你去吧! Glide 版本 3.5.2

Glide.with(context)
.load("https://graph.facebook.com/10155174010491889/picture?type=large")
.centerCrop().listener(new RequestListener<String, GlideDrawable>() {
                    @Override
                    public boolean onException(Exception e, 
                    String model, 
                    Target<GlideDrawable> target, 
                    boolean isFirstResource) {
                        spinKitView.setVisibility(View.GONE);
                        return false;
                    }

                    @Override
                    public boolean onResourceReady(GlideDrawable resource, 
                    String model, 
                    Target<GlideDrawable> target, 
                    boolean isFromMemoryCache, boolean isFirstResource) {
                        spinKitView.setVisibility(View.GONE);
                        return false;
                    }
                }).into(profile_picture);

【讨论】:

  • 这太奇怪了。昨天它在 Picasso 或 Glide 上工作了几个小时,今天突然在他们两个上都工作了,没有代码更改......可能是 facebook 问题......
  • 当时证明是facebook的临时问题。
猜你喜欢
  • 1970-01-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2016-06-20
  • 2016-03-30
  • 2015-09-15
  • 2021-03-10
  • 1970-01-01
相关资源
最近更新 更多