рдПрдХ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдкрд░ рдХреИрд╢рд┐рдВрдЧ рдЫрд╡рд┐рдпрд╛рдБ

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, sly2m рдиреЗ ImageView рд╕реЗ рдлрд╝реЛрди рдХреЗ SD рдХрд╛рд░реНрдб рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЙрдирдХреА рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдХрд┐рд╕реА рдиреЗ (рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) рдЗрд╕ рдкрдж рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рдХреА рдЙрдореНрдореАрдж рдХреА, рдЕрд░реНрдерд╛рддреН:

рез ред рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
реи ред рдРрд╕реА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╕рд╣реЗрдЬреЗрдВ
рей ред рдЙрдиреНрдирдд рдЫрд╡рд┐ рдХреИрд╢рд┐рдВрдЧ

рдЕрдЧрд░ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ - рдХреГрдкрдпрд╛ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рдЙрди рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░реЗрдЧреА, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдХреНрд▓рд╛рд╕ рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реАрдХреЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдмрдирд╛рдПрдВ рдЬреЛ рдЖрдЧреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗ:
package com.habra.imagemanager; public class ImageManager { public String md5(String s) { try { MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); digest.update(s.getBytes()); byte messageDigest[] = digest.digest(); StringBuffer hexString = new StringBuffer(); for (int i = 0; i < messageDigest.length; i++) { hexString.append(Integer.toHexString(0xFF & messageDigest[i])); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return ""; } public static void fileSave(InputStream is, FileOutputStream outputStream) { int i; try { while ((i = is.read()) != -1) { outputStream.write(i); } } catch (IOException e) { e.printStackTrace(); } } } 


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ md5 рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рд╛рдЗрд▓рд╕реНрд╡реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕реА рднреА рдЗрдирдкреБрдЯрд╕реНрдЯреНрд░реАрдо рдХреЛ FileOutputStream рдореЗрдВ рдмрдЪрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд╣рдорд╛рд░реА рддрд╕реНрд╡реАрд░реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрд╕рдбреА рдХрд╛рд░реНрдб рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВред

рдЕрдЧрд▓рд╛, рдкрд╣рд▓реЗ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рддрд╕реНрд╡реАрд░реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд╛рдЙрдирд▓реЛрдбреЗрдб рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдкреНрд░рд┐рдп рдкреНрд░рднрд╛рд╡ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕рд╛рде рдХрдИ рд▓реЛрдб рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рджреГрд╢реНрдп рдХреЗ рдЕрдВрджрд░ ImageView рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдПред

 private Vector<ImageView> downloaded = new Vector<ImageView>(); public boolean findObject(ImageView object) { for (int i = 0; i < downloaded.size(); i++) { if (downloaded.elementAt(i).equals(object)) { return true; } } return false; } 


FindObject рд╡рд┐рдзрд┐ рдкрдВрдХреНрддрд┐рдмрджреНрдз рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдЦреЛрдЬреЗрдЧреА рдФрд░ рдпрджрд┐ рдорд┐рд▓реА рд╣реИ рддреЛ рд╕рд╣реА рд▓реМрдЯреЗрдВрдЧреАред

рдФрд░ рдЕрдм рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рджреЛ рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:

 private Bitmap downloadImage(Context context, int cacheTime, String iUrl, ImageView iView) { Bitmap bitmap = null; if (cacheTime != 0) { File file = new File(context.getExternalCacheDir(), md5(iUrl) + ".cache"); long time = new Date().getTime() / 1000; long timeLastModifed = file.lastModified() / 1000; try { if (file.exists()) { if (timeLastModifed + cacheTime < time) { file.delete(); file.createNewFile(); fileSave(new URL(iUrl).openStream(), new FileOutputStream(file)); } } else { file.createNewFile(); fileSave(new URL(iUrl).openStream(), new FileOutputStream( file)); } bitmap = BitmapFactory.decodeStream(new FileInputStream(file)); } catch (Exception e) { e.printStackTrace(); } if (bitmap == null) { file.delete(); } } else { try { bitmap = BitmapFactory.decodeStream(new URL(iUrl).openStream()); } catch (Exception e) { e.printStackTrace(); } } if (iView != null) { downloaded.remove(iView); } return bitmap; } public void fetchImage(final Context context, final int cacheTime, final String url, final ImageView iView) { if (iView != null) { if (findObject(iView)) { return; } downloaded.add(iView); } new AsyncTask<String, Void, Bitmap>() { protected Bitmap doInBackground(String... iUrl) { return downloadImage(context, cacheTime, iUrl[0], iView); } protected void onPostExecute(Bitmap result) { super.onPostExecute(result); if (iView != null) { iView.setImageBitmap(result); } } }.execute(new String[] { url }); } 


рддреЛ, рд╡рд┐рдзрд┐ downloadImage (рдЧрддрд┐рд╡рд┐рдзрд┐ рдЧрддрд┐рд╡рд┐рдзрд┐, int cacheTime, String iUrl, ImageView iView) рд╡реЗрдм рдФрд░ рдЗрд╕рдХреА рдХреИрд╢рд┐рдВрдЧ рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдмрд╣реБрдд рд▓реЛрдбрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░:


рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ (рдирд┐рдЬреА рд╕рдВрд╢реЛрдзрдХ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛?), рд▓реЗрдХрд┐рди fetchImage рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдЬреЛ downloadImage рдХреЗ рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддрд╛ рд╣реИред FetchImage рд╡рд┐рдзрд┐ рд╣реА ImageView рдореЗрдВ рдЫрд╡рд┐рдпреЛрдВ рдХреА рдбрд╛рдЙрдирд▓реЛрдб рд╕реВрдЪреА рдФрд░ рд╕реНрдерд╛рдкрдирд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреА рд╣реИред
рдореЗрд░реА рд╡рд┐рдирдореНрд░ рд░рд╛рдп рдореЗрдВ, рдХреЛрдб рд╕рд╣рдЬ рд╣реИ рдФрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдВ рдХрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛:

 ImageManager man = new ImageManager(); ImageView i1 = (ImageView) findViewById(R.id.i1); ImageView i2 = (ImageView) findViewById(R.id.i2); ImageView i3 = (ImageView) findViewById(R.id.i3); man.fetchImage(this, 3600, "http://habrastorage.org/storage1/51624865/5d7f2b56/333c3c3f/fa5cdc9b.png", i1); man.fetchImage(this, 3600, "http://habrastorage.org/storage1/9042dd3c/acc1f8b3/782ca380/c05ecaf3.png", i2); man.fetchImage(this, 3600, "http://habrastorage.org/storage1/39a0bbce/4f56b8c7/ca84d78f/8b7bf972.png", i3); 


рдЕрджреНрдпрддрди: рдХрдХреНрд╖рд╛ рд╕реНрд░реЛрдд рдХреЛрдб
рдЕрджреНрдпрддрди 2: AsyncTask рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рднреНрд░реВрдг рдХреА рд╡рд┐рдзрд┐
рдЕрджреНрдпрддрди 3: рдЧрддрд┐рд╡рд┐рдзрд┐ рдкреНрд░рд╕рдВрдЧ рдореЗрдВ рдмрджрд▓ рдЧрдИ

Source: https://habr.com/ru/post/In133239/


All Articles