【问题标题】:Picasso Download Multiple Images From URLPicasso 从 URL 下载多个图像
【发布时间】:2026-01-01 19:30:01
【问题描述】:

我正在开发一个应用程序,我在其中使用Picasso Library 从 URL 下载图像。

现在有一种情况:我可以从 URL 下载单个图像:http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg

但无法从 URL 下载多个图像: https://www.dropbox.com/sh/5be3kgehyg8uzh2/AAA-jYcy_21nLBwnZQ3TBFAea

这是我的代码:

package com.example.imagedownloadsample;

import java.io.File;
import java.io.FileOutputStream;

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;

import com.squareup.picasso.Callback.EmptyCallback;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;

public class MainActivity extends ActionBarActivity {

    String currentUrl ="http://8020.photos.jpgmag.com/3456318_294166_528c960558_m.jpg";
    //String currentUrl = "https://www.dropbox.com/sh/5be3kgehyg8uzh2/AAA-jYcy_21nLBwnZQ3TBFAea";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.image_download);

        final ImageView img = (ImageView) (findViewById(R.id.imageView1));

        final ProgressBar progressBar = (ProgressBar) findViewById(R.id.loading);

        Picasso.with(this).load(currentUrl).error(R.drawable.error_detail)
                .into(img, new EmptyCallback() {
                    @Override
                    public void onSuccess() {
                        progressBar.setVisibility(View.GONE);
                    }

                    @Override
                    public void onError() {
                        progressBar.setVisibility(View.GONE);
                    }
                });

        Picasso.with(this).load(currentUrl).into(target);

    }

    private Target target = new Target() {
        @Override
        public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
            new Thread(new Runnable() {
                @Override
                public void run() {

                    String fileName = currentUrl.substring(
                            currentUrl.lastIndexOf('/') + 1,
                            currentUrl.length());

                    String fname = "/Android/data/com.usd.pop/image-"
                            + fileName;

                    File file = new File(Environment
                            .getExternalStorageDirectory().getPath() + fname);
                    if (file.exists())
                        file.delete();
                    try {
                        file.createNewFile();
                        FileOutputStream ostream = new FileOutputStream(file);
                        bitmap.compress(CompressFormat.JPEG, 100, ostream);
                        ostream.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                }
            }).start();
        }

        @Override
        public void onBitmapFailed(Drawable errorDrawable) {
        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
            if (placeHolderDrawable != null) {
            }
        }
    };

}

现在我的问题是如何从该 URL 下载所有图像。 https://www.dropbox.com/sh/5be3kgehyg8uzh2/AAA-jYcy_21nLBwnZQ3TBFAea

【问题讨论】:

  • 有没有人可以回答,16小时后等待回答

标签: android url android-image picasso android-internet


【解决方案1】:

我可能很笨,但我相信您使用的是 Java,我建议您使用 this 教程。

这是一些从网站上获取所有图像的代码:

public class ExtractAllImages {
    public static void main(String args[]) throws Exception {

    String webUrl = "http://www.hdwallpapers.in/";
    URL url = new URL(webUrl);
    URLConnection connection = url.openConnection();
    InputStream is = connection.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    HTMLEditorKit htmlKit = new HTMLEditorKit();
    HTMLDocument htmlDoc = (HTMLDocument) htmlKit.createDefaultDocument();
    HTMLEditorKit.Parser parser = new ParserDelegator();
    HTMLEditorKit.ParserCallback callback = htmlDoc.getReader(0);
    parser.parse(br, callback, true);

    for (HTMLDocument.Iterator iterator = htmlDoc.getIterator(HTML.Tag.IMG); iterator.isValid(); iterator.next()) {
        AttributeSet attributes = iterator.getAttributes();
        String imgSrc = (String) attributes.getAttribute(HTML.Attribute.SRC);

        if (imgSrc != null && (imgSrc.endsWith(".jpg") || (imgSrc.endsWith(".png")) || (imgSrc.endsWith(".jpeg")) || (imgSrc.endsWith(".bmp")) || (imgSrc.endsWith(".ico")))) {
            try {
                downloadImage(webUrl, imgSrc);
            } catch (IOException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }
}
private static void downloadImage(String url, String imgSrc) throws IOException {
    BufferedImage image = null;
    try {
        if (!(imgSrc.startsWith("http"))) {
            url = url + imgSrc;
        } else {
            url = imgSrc;
        }
        imgSrc = imgSrc.substring(imgSrc.lastIndexOf("/") + 1);
        String imageFormat = null;
        imageFormat = imgSrc.substring(imgSrc.lastIndexOf(".") + 1);
        String imgPath = null;
        imgPath = "C:/Users/Machine2/Desktop/CTE/Java-WebsiteRead/" + imgSrc + "";
        URL imageUrl = new URL(url);
        image = ImageIO.read(imageUrl);
        if (image != null) {
            File file = new File(imgPath);
            ImageIO.write(image, imageFormat, file);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

}}

【讨论】:

  • 兄弟感谢您的回答,但我可以在 android 中使用它还是在 android 中使用它
  • 老实说,我不完全确定。我认为android是用java编写的,但是这不像你的那样使用毕加索。我从来没有为 android 设计过,所以我无法测试它。
【解决方案2】:

很确定您需要知道要检索的所有图像的名称。

因此,您无法从 url 中检索所有内容,而是需要知道每个图像的名称,并逐步通过数组或其他内容来单独检索它们。

很确定你不能这样做:

Picasso.with(this).load(http://someurl.com/photos/*).into(target);

【讨论】:

  • 我知道这并不容易,这就是为什么我要求这种方式从 url 检索所有图像
【解决方案3】:

首先,您需要使用 Volley 库或其他一些 json 解析库从该 URL 获取响应图像,然后将它们放入 array ,您的数组应该看起来像 images URL 数组。然后对于图像的每个位置,您都可以使用 Picasso 加载它。谢谢

【讨论】: