Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从URL下载图像并将其保存到内部存储器的最佳方法_Android - Fatal编程技术网

Android 从URL下载图像并将其保存到内部存储器的最佳方法

Android 从URL下载图像并将其保存到内部存储器的最佳方法,android,Android,我正在开发一个应用程序,我想从URL下载图片。我需要立即下载这些图像并将其存储到内部存储器中。有200多张图片可供下载。请告诉我在尽可能短的时间内下载这些图片的最佳方式。如果有任何第三方库可用,请告知。考虑使用毕加索来实现您的目的。我正在我的一个项目中使用它。要在外部磁盘上保存映像,可以使用以下命令: Picasso.with(mContext) .load(ImageUrl) .into(new Target() { @Override

我正在开发一个应用程序,我想从URL下载图片。我需要立即下载这些图像并将其存储到内部存储器中。有200多张图片可供下载。请告诉我在尽可能短的时间内下载这些图片的最佳方式。如果有任何第三方库可用,请告知。

考虑使用毕加索来实现您的目的。我正在我的一个项目中使用它。要在外部磁盘上保存映像,可以使用以下命令:

 Picasso.with(mContext)
        .load(ImageUrl)
        .into(new Target() {
            @Override
            public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
                try {
                    String root = Environment.getExternalStorageDirectory().toString();
                    File myDir = new File(root + "/yourDirectory");

                    if (!myDir.exists()) {
                        myDir.mkdirs();
                    }

                    String name = new Date().toString() + ".jpg";
                    myDir = new File(myDir, name);
                    FileOutputStream out = new FileOutputStream(myDir);
                    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);

                    out.flush();
                    out.close();                        
                } catch(Exception e){
                    // some action
                }
            }

            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
            }

            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
            }
        }
    );

你可以下载这个库

您可以从如下url下载th图像:

URL url = new URL("http://www.yahoo.com/image_to_read.jpg");
InputStream in = new BufferedInputStream(url.openStream());
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int n = 0;
while (-1!=(n=in.read(buf)))
{
   out.write(buf, 0, n);
}
out.close();
in.close();
byte[] response = out.toByteArray();
然后,您可能希望保存图像,请执行以下操作:

FileOutputStream fos = new FileOutputStream("C://borrowed_image.jpg");
fos.write(response);
fos.close();

这是一项非常简单的工作…

您可以使用毕加索或截击,毕加索不会将这些图像保存到内部存储器中。它直接显示在ui上,您可以使用Volley lib并创建自定义请求,在成功响应时将图像直接写入设备内存。您可能想看一下我的这篇文章。它将图像存储在内存缓存和本地存储中。检查:我想下载200张图片。为此,我需要循环下载这些images@astuter您能告诉我保存后如何检索图像吗?@sino:查看Dhawal Shoda parmar的答案,在这个链接中:@astuter非常感谢您的快速响应!:)我试过了,但没有成功,它说如果外部存储没有问题,现在我将进行一点调试,以找出问题所在,再次感谢:)谢谢!我是android新手,这对我很有帮助。
 const actionDownloadImage = (urls) => {
        urls.map((url) => {
            const splitUrl = url.split("/");
            const filename = splitUrl[splitUrl.length - 1];
            fetch(url)
                .then((response) => {
                    response.arrayBuffer().then(function (buffer) {
                        const url = window.URL.createObjectURL(new Blob([buffer]));
                        const link = document.createElement("a");
                        link.href = url;
                        link.setAttribute("download", filename); //or any other extension
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
                    });
                })
                .catch((err) => {
                    console.log(err);
                });
        });
    }
 const actionDownloadImage = (urls) => {
        urls.map((url) => {
            const splitUrl = url.split("/");
            const filename = splitUrl[splitUrl.length - 1];
            fetch(url)
                .then((response) => {
                    response.arrayBuffer().then(function (buffer) {
                        const url = window.URL.createObjectURL(new Blob([buffer]));
                        const link = document.createElement("a");
                        link.href = url;
                        link.setAttribute("download", filename); //or any other extension
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
                    });
                })
                .catch((err) => {
                    console.log(err);
                });
        });
    }