Android下载,保存图片(HttpURLConnection,Fresco)
2017-11-28 16:47
363 查看
1⃣️下载图片
先上高端的Fresco下载的用法:(实际是缓存url的图片到本地了,下次加载同一个url会直接加载本地缓存的这个bitmap)
private void saveImageFromUrl(String url, Context context, final int i) { final ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url)) .setProgressiveRenderingEnabled(true).build(); DataSource<CloseableReference<CloseableImage>> dataSource = Fresco.getImagePipeline() .fetchDecodedImage(imageRequest, context); dataSource.subscribe(new BaseBitmapDataSubscriber() { @Override public void onNewResultImpl(Bitmap bitmap) { //形参的bitmap即Fresco缓存到内存的Bitmap // saveBitmap(bitmap); //下面是获取fresco缓存到磁盘的cnt图片的路径 CacheKey cacheKey = DefaultCacheKeyFactory.getInstance() .getEncodedCacheKey(imageRequest, this); BinaryResource resource = ImagePipelineFactory.getInstance().getMainFileCache().getResource(cacheKey); if (resource == null) return; File file = ((FileBinaryResource) resource).getFile(); if (file == null) return; Log.i("wxbnbb", "saveImageFromUrl: " + file.getAbsolutePath()); } @Override public void onFailureImpl(DataSource dataSource) { } }, CallerThreadExecutor.getInstance()); }
再上普通的HttpURLConnection下载的用法:
public void savePhoto() { new Thread(new Runnable() { @Override public void run() { url2bitmap(picUrl); } }).start(); } /** * url转bitmap对象 * * @param url */ public void url2bitmap(String url) { Bitmap bm = null; try { URL iconUrl = new URL(url); URLConnection conn = iconUrl.openConnection(); HttpURLConnection http = (HttpURLConnection) conn; int length = http.getContentLength(); conn.connect(); //获得图像的字符流 InputStream is = conn.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is, length); bm = BitmapFactory.decodeStream(bis); bis.close(); is.close(); if (bm != null) { saveBitmap(bm); } } catch (Exception e) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show(); } }); e.printStackTrace(); } }
2⃣️用上面两种方法下载完bitmap后保存:
/** * 保存bitmap到本地 * * @param bitmap */ private void saveBitmap(Bitmap bitmap) { File appDir = new File(Environment.getExternalStorageDirectory(), "图片文件夹"); if (!appDir.exists()) appDir.mkdir(); String[] str = picUrl.split("/"); String fileName = str[str.length - 1]; File file = new File(appDir, fileName); try { FileOutputStream fos = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); fos.flush(); fos.close(); //file.getAbsolutePath();//获取保存的图片的文件名 // onSaveSuccess(file); } catch (IOException e) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(context, "保存失败", Toast.LENGTH_SHORT).show(); } }); e.printStackTrace(); } }
备注:如果要通知相册更新
private void onSaveSuccess(final File file) { runOnUiThread(new Runnable() { @Override public void run() { sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show(); } }); }
fresco的磁盘缓存数据并不会随着app的删除而自动清理
相关文章推荐
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- Android HttpURLConnection获取网络下载图片POST请求方式
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- Android中如何使用HttpURLConnection实现GET POST JSON数据与下载图片
- 【Android进阶】使用HttpURLConnection实现图片的下载与现显示
- android httpUrlConnection 方式从网络上面下载图片
- [置顶] Android开发之下载服务器上的一张图片到本地java代码实现HttpURLConnection
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
- Android - HttpURLConnection下载网络文件,加载网络图片
- Android开发之下载服务器上的一张图片到本地java代码实现HttpURLConnection
- Android使用HttpURLConnection下载图片
- android 如何使用httpurlconnection下载一张图片demo
- Android基于HttpURLConnection的异步下载图片
- Android使用HttpURLConnection下载图片
- android-HttpURLConnection+Handler+Thread下载图片并显示
- Android-上传图片(-)_HttpURLConnection
- android 文件下载详解(HttpURLConnection)
- Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例 (附源码)
- android开发之HttpUrlConnection与OkHttp实现文件上传下载