使用 Volley 下载 image/video 到外部存储 (Android)

Using Volley to download image/video to external storage (Android)

我有 url 次收到来自截击 JsonObectRequest 的响应。我想要做的是将这些图像直接保存到我的外部存储器上的一个文件夹中,这样我就不必再从互联网上加载它们了。请记住,下载可能还包括视频...

//这里是截取urls

的代码
private static final String endpoint = "http://api.androidhive.info/json/glide.json";

//提取图像的代码url

JsonArrayRequest req = new JsonArrayRequest(endpoint,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());
                    pDialog.hide();

                    images.clear();
                    for (int i = 0; i < response.length(); i++) {
                        try {
                            JSONObject object = response.getJSONObject(i);
                            Image image = new Image();
                            image.setName(object.getString("name"));

                            JSONObject url = object.getJSONObject("url");
                            image.setSmall(url.getString("small"));
                            image.setMedium(url.getString("medium"));
                            image.setLarge(url.getString("large"));
                            image.setTimestamp(object.getString("timestamp"));

                        } catch (JSONException e) {
                            Log.e(TAG, "Json parsing error: " + e.getMessage());
                        }
                    }

                    mAdapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Error: " + error.getMessage());
            pDialog.hide();
        }
    });

现在,我如何请求下载以便使用 volley 将文件保存在我的外部文件中。谢谢

 public boolean storeImages(Bitmap imageBitmap, String fileName, String dirName, int index) {
    File file;
    if (isExternalStorageWritable() && isExternalStorageReadable()) {
        file = storeImageExternalMemory(dirName, albumName, String.valueOf(index));
    }
    try {
        assert file != null;
        FileOutputStream out = new FileOutputStream(file);
        imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();
        updateImageTable(file, index);  // Implement Your own method to update ur DB table, U can access file location from DB table for future use of images
        return true;
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }
}

将下载的图片转换为位图并保存到手机中的所需位置。然后你可以重复使用图像。

     private File storeImageExternalMemory(String dirName, String mediaName) {
    String packageName = mContext.getPackageName();
    File mediaStorageDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath()
            + "/Android/data/" + packageName + dirName);

    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            return null;
        }
    }
    File mediaFile;
    mediaFile = new File(mediaStorageDir.getPath(), mediaName + ".jpeg");
    return mediaFile;
}

/* Checks if external storage is available for read and write */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    return Environment.MEDIA_MOUNTED.equals(state);
}

/* Checks if external storage is available to at least read */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    return Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state);
}