如何使用Ion库将图像下载并保存到app目录中

时间:2016-04-04 06:30:13

标签: android imageview ion

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

我要做的是,使用导航视图标题中的图像视图,并希望下载图像一次并显示该图像,直到和除非我将其释放

所以我正在使用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目录中,而不是直接在Image视图中显示它。

我想下载图片并将图片保存在app目录中。我可以将Ion库用于此目的,或者我还需要做更多的事情。 ??请帮忙。

2 个答案:

答案 0 :(得分:1)

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);
    }
祝你好运!

答案 1 :(得分:0)

是的,您可以使用Ion将图像保存到内部/外部存储器中。您可以参考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
    }
});