【问题标题】:glide and picasso cannot load a picture by url [closed]滑翔和毕加索无法通过网址加载图片[关闭]
【发布时间】:2020-01-15 22:53:22
【问题描述】:

我有链接

https://www.imdb.com/title/tt0068646/mediaviewer/rm746868224

我需要下载这张图片,Glide 和 Picasso 都帮不了我。他们都返回错误。示例我如何使用它们

        Glide.with(Objects.requireNonNull(getContext()))
            .load(movieDetails.getImage())
            .fitCenter()
            .placeholder(R.drawable.wait_button)
            .error(R.drawable.error_download)
            .into(image);

    Picasso.get()
            .load(movieDetails.getImage())
            .fit()
            .placeholder(R.drawable.wait_button)
            .error(R.drawable.error_download)
            .into(image);

image - 是我的目标 ImageView
我做错了什么?还是网址有问题?
如何下载 Glide 或 Picasso 的这张照片?
我的项目中有另一种类型的 url,它们都以 ....jpg 结尾,一切正常

【问题讨论】:

    标签: android imageview picasso android-glide


    【解决方案1】:

    这是您应该尝试的链接 Godfather 而不是

    https://www.imdb.com/title/tt0068646/mediaviewer/rm746868224
    

    【讨论】:

    • 我明白你的意思。也许你知道 - 我怎样才能自动收到这个链接?
    • @Kirguduck 似乎该链接不适用于图像。我认为这是因为图像尺寸很大。您可以通过右键单击浏览和检查元素来获取实际的 url。另一种方法是解析 html 的 url 并获取所需的海报 url,然后 glide 将正确加载
    • @Kirguduck 我发布了一种通过使用 jsoup 进行 html 解析来获取海报 url 的方法。
    • 你可以用jsoup解析html并刮出原图链接。
    【解决方案2】:
     Glide.with(mContext)
                    .load("https://www.imdb.com/title/tt0068646/mediaviewer/rm746868224.jpg")
                    .apply(new RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL).fitCenter())
                    .into(image);
    

    【讨论】:

      【解决方案3】:

      网址不是下载图片。此https://www.imdb.com/title/tt0068646/mediaviewer/rm746868224 不是海报图片的有效网址。

      相反,您需要解析 html 并获取所需的图像 url。

      在 html 中,您有以下内容,并且 url 在元标记中

       <meta itemprop="image" content="https://m.media-amazon.com/images/M/MV5BM2MyNjYxNmUtYTAwNi00MTYxLWJmNWYtYzZlODY3ZTk3OTFlXkEyXkFqcGdeQXVyNzkwMjQ5NzM@._V1_QL50_SY500_CR0,0,352,500_AL_.jpg">
      

      对于提供的url,您可以使用jsoup解析器解析html来解析并获取链接。

      将以下内容添加到您的应用 build.gradle 文件中

       implementation group: 'org.jsoup', name: 'jsoup', version: '1.12.1'
      

      使用 asynctask doInBackground

        Document document = Jsoup.connect("https://www.imdb.com/title/tt0068646/mediaviewer/rm746868224");
        Element  meta = document.select("meta[itemprop=image]").first()
        String image_url = meta.attr("content")
      

      在 onPostEecute 中

         Glide.with(context).load(url) // url is the one returned in doInbackground
                  .override(100, 200) // provide some width and height. glide will automatically scale the image down appropriately
                  .into(image);
      

      注意:我想 imdb 提供了 api 来获取海报图片,但我认为它是付费许可的。不确定合法性。

      同样可以解析html下的其他标签,获取需要的信息。

      我还检查了其他网址,例如 https://www.imdb.com/title/tt0068647/mediaviewer/rm2109407488 元具有图像网址。所以这也可以用于其他网址。

      【讨论】:

      • 谢谢!我寻找它。但是你从哪里得到这个字符串 m.media-amazon.com/images/M/…">
      • 使用 chrome 开发者工具检查 html。您也可以通过仅使用 url 获取内容来在线尝试 jsoup
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 2015-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      相关资源
      最近更新 更多