如何使用 Ion 库下载图像并将其保存到应用程序目录中

How to download and save image into the app directory using Ion library

我正在使用 Ion 库,它运行良好。但另一方面,我必须下载图像并将其保存到应用程序目录。

我想做的是,在导航视图中使用图像视图 header 并希望下载一次图像并在下一次显示该图像,除非我将其释放

所以我在使用 Ion 库调用服务器时,所以我在考虑为什么不将 Ion 库也用于此目的。我所知道的是它具有下载图像并在图像视图中显示图像的有效功能

 // This is the "long" way to do build an ImageView request... it allows you to set headers, etc.
Ion.with(context)
.load("http://example.com/image.png")
.withBitmap()
.placeholder(R.drawable.placeholder_image)
.error(R.drawable.error_image)
.animateLoad(spinAnimation)
.animateIn(fadeInAnimation)
.intoImageView(imageView);

// but for brevity, use the ImageView specific builder...
Ion.with(imageView)
.placeholder(R.drawable.placeholder_image)
.error(R.drawable.error_image)
.animateLoad(spinAnimation)
.animateIn(fadeInAnimation)
.load("http://example.com/image.png");

我真的不知道如何使用它并将图像保存在应用程序目录中而不是直接在图像视图中显示它。

我要下载图片并将图片保存在app目录下。我可以为此目的使用 Ion 库吗,或者我必须做更多的事情。 ??请帮忙。

Ion.with(this).load("url").withBitmap().asBitmap()
    .setCallback(new FutureCallback<Bitmap>() {
        @Override
        public void onCompleted(Exception e, Bitmap result) {
            // do something with your bitmap
        }
    });

您将在 onCompleted 回调中获得一个位图,即您的位图图像。现在您可以轻松地保存到您想要的位置。

保存位图:

//the string here is the file name
        public static void saveBitmap(Context context, Bitmap original, String name) {
    try {
    File imageFile = createPngFileFromBitmap(name, original);
    addImageToGallery(imageFile.getAbsolutePath(), context);


    } catch (FileNotFoundException e) {
    e.printStackTrace();
    }

    }

    public static void addImageToGallery(final String filePath, final Context context) {

    ContentValues values = new ContentValues();

    values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
    values.put(MediaStore.MediaColumns.DATA, filePath);


    context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    }

    public static File createPngFileFromBitmap(String name, Bitmap bitmap) throws FileNotFoundException {
    File picture = createPngFile(name);
    OutputStream stream = new FileOutputStream(picture);
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);

    return picture;
    }

    private static File createPngFile(String name) {
    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Your folder name");
    if (!file.mkdirs()) {
    } else {
    file.mkdirs();
    }
    return new File(file.getAbsolutePath(), name);
    }

祝你好运!

是的,您可以使用 Ion 将图像保存到 internal/external 内存中。 more detail

可以参考他们的官方文档
Ion.with(context)
.load("http://example.com/really-big-file.zip")
// have a ProgressBar get updated automatically with the percent
.progressBar(progressBar)
// and a ProgressDialog
.progressDialog(progressDialog)
// can also use a custom callback
.progress(new ProgressCallback() {@Override
   public void onProgress(int downloaded, int total) {
       System.out.println("" + downloaded + " / " + total);
   }
})
.write(new File("/sdcard/really-big-file.zip"))
.setCallback(new FutureCallback<File>() {
   @Override
    public void onCompleted(Exception e, File file) {
        // download done...
        // do stuff with the File or error
    }
});