下载图片并保存

Download images and save it

我正在做一个学校 android 项目。 我需要一个下载图片的下载按钮(当我们有 class 时) 并在另一个显示后 activity(即使在离线模式下,退出后)

我试过 picasso,但我无法保存它并在离线模式下使用它。

您可以使用 Android 名为 Universal Image Loader 的库:​​

https://github.com/nostra13/Android-Universal-Image-Loader

为了支持离线模式,您需要将图像保存在磁盘上,因为当缓存被清除时,图像也会被清除。

您可以轻松地使用 Glide 来解决这个问题,也可以在设备上存储和检索

您可以在此处了解有关 Glide 的更多信息http://inthecheesefactory.com/blog/get-to-know-glide-recommended-by-google/en

/** Download the image using Glide **/

Bitmap theBitmap = null;
theBitmap = Glide.
    with(YourActivity.this).
    load("Url of your image").
    asBitmap().
    into(-1, -1).
    get();

   saveToInternalStorage(theBitmap, getApplicationContext(), "your preferred image name");

/** Save it on your device **/

public String saveToInternalStorage(Bitmap bitmapImage, Context context, String name){


        ContextWrapper cw = new ContextWrapper(context);
        // path to /data/data/yourapp/app_data/imageDir

        String name_="foldername"; //Folder name in device android/data/
        File directory = cw.getDir(name_, Context.MODE_PRIVATE);

        // Create imageDir
        File mypath=new File(directory,name);

        FileOutputStream fos = null;
        try {

            fos = new FileOutputStream(mypath);

            // Use the compress method on the BitMap object to write image to the OutputStream
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.e("absolutepath ", directory.getAbsolutePath());
        return directory.getAbsolutePath();
    }

/** Method to retrieve image from your device **/

public Bitmap loadImageFromStorage(String path, String name)
    {
        Bitmap b;
        String name_="foldername";
        try {
            File f=new File(path, name_);
            b = BitmapFactory.decodeStream(new FileInputStream(f));
            return b;
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        return null;
    }

/** Retrieve your image from device and set to imageview **/
//Provide your image path and name of the image your previously used.

Bitmap b= loadImageFromStorage(String path, String name)
ImageView img=(ImageView)findViewById(R.id.your_image_id);
img.setImageBitmap(b);

感谢@Droidman: How to download and save an image in Android

Of course you can perform downloading and managing images by yourself, but if your project is quite complex already, there are a lot of libraries around and you do not need to reinvent the wheel. I won't post code this time since there are a lot of examples, but I'm going to tell you about 2 most useful libraries (IMO) related to image downloading.

1) Android Volley. A powerful networking library created by Google and covered by official documentation. POST'ing or GET'ing data, images, JSON - volley will manage it for you. Using volley just for image downloading is a bit of an overkill in my opinion.

2) Picasso

Image downloading and caching, perfect for ListView/GridView/RecyclerView. Apache 2.0 license.

3) Fresco

Quite a new image loading library created by Facebook. Progressive JPEG streaming, gifs and more. Apache 2.0