//bitmap圖片集合 private ArrayList<Bitmap> bitmapArrayList = new ArrayList<>(); RequestOptions requestOptions = new RequestOptions() .transform(new GlideRoundTransform(mContext, radius, cornerType)); GlideApp.with(mIvImg.getContext()) .asBitmap() .load(url) .listener(new RequestListener<Bitmap>() { @Override public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Bitmap> target, boolean isFirstResource) { return true; } @Override public boolean onResourceReady(Bitmap resource, Object model, Target<Bitmap> target, DataSource dataSource, boolean isFirstResource) { bitmapArrayList.add(resource); return false; } }) .apply(requestOptions) .placeholder(ImageUtils.getDefaultImage()) .into(mIvImg); //循環遍歷圖片資源集合,而後開始保存圖片到本地文件夾 mBitmap = bitmapArrayList.get(i); savePath = FileSaveUtils.getLocalImgSavePath(); FileOutputStream fos = null; try { File filePic = new File(savePath); if (!filePic.exists()) { filePic.getParentFile().mkdirs(); filePic.createNewFile(); } fos = new FileOutputStream(filePic); // 100 圖片品質爲滿 mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (IOException e) { e.printStackTrace(); return null; } finally { if (fos != null) { try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } //刷新相冊 if (isScanner) { scanner(context, savePath); } }
/** * 請求網絡圖片 * @param url url * @return 將url圖片轉化成bitmap對象 */ private static long time = 0; public static InputStream HttpImage(String url) { long l1 = System.currentTimeMillis(); URL myFileUrl = null; Bitmap bitmap = null; HttpURLConnection conn = null; InputStream is = null; try { myFileUrl = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); } try { conn = (HttpURLConnection) myFileUrl.openConnection(); conn.setConnectTimeout(10000); conn.setReadTimeout(5000); conn.setDoInput(true); conn.connect(); is = conn.getInputStream(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (is != null) { is.close(); conn.disconnect(); } } catch (IOException e) { e.printStackTrace(); } long l2 = System.currentTimeMillis(); time = (l2-l1) + time; LogUtils.e("毫秒值"+time); //保存 } return is; }
InputStream inputStream = HttpImage( "https://img1.haowmc.com/hwmc/material/2019061079934131.jpg"); String localImgSavePath = FileSaveUtils.getLocalImgSavePath(); File imageFile = new File(localImgSavePath); if (!imageFile.exists()) { imageFile.getParentFile().mkdirs(); try { imageFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileOutputStream fos = null; BufferedInputStream bis = null; try { fos = new FileOutputStream(imageFile); bis = new BufferedInputStream(inputStream); byte[] buffer = new byte[1024]; int len; while ((len = bis.read(buffer)) != -1) { fos.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (bis != null) { bis.close(); } if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } }
File file = Glide.with(ReflexActivity.this) .load(url.get(0)) .downloadOnly(500, 500) .get();
String localImgSavePath = FileSaveUtils.getLocalImgSavePath(); File imageFile = new File(localImgSavePath); if (!imageFile.exists()) { imageFile.getParentFile().mkdirs(); imageFile.createNewFile(); } copy(file,imageFile); /** * 複製文件 * * @param source 輸入文件 * @param target 輸出文件 */ public static void copy(File source, File target) { FileInputStream fileInputStream = null; FileOutputStream fileOutputStream = null; try { fileInputStream = new FileInputStream(source); fileOutputStream = new FileOutputStream(target); byte[] buffer = new byte[1024]; while (fileInputStream.read(buffer) > 0) { fileOutputStream.write(buffer); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (fileInputStream != null) { fileInputStream.close(); } if (fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e) { e.printStackTrace(); } } }
ArrayList<String> images = new ArrayList<>(); for (String image : images){ //使用該線程池,及時run方法中執行異常也不會崩潰 PoolThread executor = BaseApplication.getApplication().getExecutor(); executor.setName("getImage"); executor.execute(new Runnable() { @Override public void run() { //請求網絡圖片並保存到本地操做 } }); }
ArrayList<String> images = new ArrayList<>(); ApiService apiService = RetrofitService.getInstance().getApiService(); //注意:此處是保存多張圖片,能夠採用異步線程 ArrayList<Observable<Boolean>> observables = new ArrayList<>(); final AtomicInteger count = new AtomicInteger(); for (String image : images){ observables.add(apiService.downloadImage(image) .subscribeOn(Schedulers.io()) .map(new Function<ResponseBody, Boolean>() { @Override public Boolean apply(ResponseBody responseBody) throws Exception { saveIo(responseBody.byteStream()); return true; } })); } // observable的merge 將全部的observable合成一個Observable,全部的observable同時發射數據 Disposable subscribe = Observable.merge(observables).observeOn(AndroidSchedulers.mainThread()) .subscribe(new Consumer<Boolean>() { @Override public void accept(Boolean b) throws Exception { if (b) { count.addAndGet(1); Log.e("yc", "download is succcess"); } } }, new Consumer<Throwable>() { @Override public void accept(Throwable throwable) throws Exception { Log.e("yc", "download error"); } }, new Action() { @Override public void run() throws Exception { Log.e("yc", "download complete"); // 下載成功的數量 和 圖片集合的數量一致,說明所有下載成功了 if (images.size() == count.get()) { ToastUtils.showRoundRectToast("保存成功"); } else { if (count.get() == 0) { ToastUtils.showRoundRectToast("保存失敗"); } else { ToastUtils.showRoundRectToast("因網絡問題 保存成功" + count + ",保存失敗" + (images.size() - count.get())); } } } }, new Consumer<Disposable>() { @Override public void accept(Disposable disposable) throws Exception { Log.e("yc","disposable"); } }); private void saveIo(InputStream inputStream){ String localImgSavePath = FileSaveUtils.getLocalImgSavePath(); File imageFile = new File(localImgSavePath); if (!imageFile.exists()) { imageFile.getParentFile().mkdirs(); try { imageFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } FileOutputStream fos = null; BufferedInputStream bis = null; try { fos = new FileOutputStream(imageFile); bis = new BufferedInputStream(inputStream); byte[] buffer = new byte[1024]; int len; while ((len = bis.read(buffer)) != -1) { fos.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (bis != null) { bis.close(); } if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } //刷新相冊代碼省略…… } }