Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Please copy the below class . That class is download the images from the web and stores into the memory card or into internal memory of application .</p> <pre><code>import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.HashMap; import java.util.Stack; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.widget.ImageView; public class Imageloader { // the simplest in-memory cache implementation. This should be replaced with // something like SoftReference or BitmapOptions.inPurgeable(since 1.6) private HashMap&lt;String, Bitmap&gt; cache = new HashMap&lt;String, Bitmap&gt;(); private File cacheDir = null; private Bitmap useThisBitmap = null; @SuppressWarnings("unused") private Context ctx = null; public Imageloader(Context context) { // Make the background thead low priority. This way it will not affect // the UI performance ctx = context; photoLoaderThread.setPriority(Thread.NORM_PRIORITY - 1); // Find the dir to save cached images if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) cacheDir = new File(android.os.Environment.getExternalStorageDirectory(),"DownloadImages/AlbumArt/"); else cacheDir = context.getCacheDir(); if (!cacheDir.exists()) cacheDir.mkdirs(); } public void DisplayImage(String url, Activity activity, ImageView imageView) { if(!url.equals("")) { if (cache.containsKey(url)) { imageView.setImageBitmap(cache.get(url)); } else { queuePhoto(url, activity, imageView); } } } private void queuePhoto(String url, Activity activity, ImageView imageView) { // This ImageView may be used for other images before. So there may be // some old tasks in the queue. We need to discard them. photosQueue.Clean(imageView); PhotoToLoad p = new PhotoToLoad(url, imageView); synchronized (photosQueue.photosToLoad) { photosQueue.photosToLoad.push(p); photosQueue.photosToLoad.notifyAll(); } // start thread if it's not started yet if (photoLoaderThread.getState() == Thread.State.NEW) photoLoaderThread.start(); } public Bitmap getBitmap(String url) { try { // I identify images by hashcode. Not a perfect solution, good for the // demo. String filename = String.valueOf(url.hashCode()); File f = new File(cacheDir, filename); // from SD cache Bitmap b = decodeFile(f); if (b != null) return b; // from web try { Bitmap bitmap = null; if(!url.equals("")){ InputStream is = new URL(url).openStream(); OutputStream os = new FileOutputStream(f); Utils.CopyStream(is, os); os.close(); bitmap = decodeFile(f); } return bitmap; } catch (Exception ex) { ex.printStackTrace(); return null; } } catch(Exception e) { e.printStackTrace(); return null; } } /*decodes image and scales it to reduce memory consumption * @param file path * @throws FileNotFoundException * @return bitmap * */ private Bitmap decodeFile(File f){ Bitmap b = null; try { useThisBitmap = null; //Decode image size BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; final int IMAGE_MAX_SIZE = 70; BitmapFactory.decodeStream(new FileInputStream(f), null, o); int scale = 2; if (o.outHeight &gt; IMAGE_MAX_SIZE || o.outWidth &gt; IMAGE_MAX_SIZE) { scale = 2 ^ (int) Math.ceil(Math.log(IMAGE_MAX_SIZE / (double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)); } //Decode with inSampleSize BitmapFactory.Options o2 = new BitmapFactory.Options(); o2.inSampleSize = scale; b = BitmapFactory.decodeStream(new FileInputStream(f), null, o2); useThisBitmap = b; } catch (FileNotFoundException e) { } catch(Exception e) { e.printStackTrace(); } finally { System.gc(); } return useThisBitmap; } // Task for the queue private class PhotoToLoad { public String url; public ImageView imageView; public PhotoToLoad(String u, ImageView i) { url = u; imageView = i; } } private PhotosQueue photosQueue = new PhotosQueue(); // stores list of photos to download private class PhotosQueue { private Stack&lt;PhotoToLoad&gt; photosToLoad = new Stack&lt;PhotoToLoad&gt;(); // removes all instances of this ImageView private void Clean(ImageView image) { for (int j = 0; j &lt; photosToLoad.size();) { if (photosToLoad.get(j).imageView == image) photosToLoad.remove(j); else ++j; } } } private class PhotosLoader extends Thread { public void run() { try { while (true) { // thread waits until there are any images to load in the // queue if (photosQueue.photosToLoad.size() == 0) synchronized (photosQueue.photosToLoad) { photosQueue.photosToLoad.wait(); } if (photosQueue.photosToLoad.size() != 0) { PhotoToLoad photoToLoad; synchronized (photosQueue.photosToLoad) { photoToLoad = photosQueue.photosToLoad.pop(); } Bitmap bmp = getBitmap(photoToLoad.url); cache.put(photoToLoad.url, bmp); if (((String) photoToLoad.imageView.getTag()) .equals(photoToLoad.url)) { BitmapDisplayer bd = new BitmapDisplayer(bmp, photoToLoad.imageView); Activity a = (Activity) photoToLoad.imageView .getContext(); a.runOnUiThread(bd); } } if (Thread.interrupted()) break; } } catch (InterruptedException e) { // allow thread to exit } } } private PhotosLoader photoLoaderThread = new PhotosLoader(); // Used to display bitmap in the UI thread private class BitmapDisplayer implements Runnable { private Bitmap bitmap; private ImageView imageView; private BitmapDisplayer(Bitmap b, ImageView i) { bitmap = b; imageView = i; } public void run() { if (bitmap != null) imageView.setImageBitmap(bitmap); } } public void stopThread() { photoLoaderThread.interrupt(); } public void clearCache() { cache.clear(); File[] files = cacheDir.listFiles(); for (File f : files) f.delete(); } } </code></pre> <h2>Example</h2> <p>First create your image Loader class object.</p> <pre><code>Imageloader imageLoader = new Imageloader(getApplicationContext()); </code></pre> <p>then set the image url into the imageview's <code>setTag</code> Property.</p> <pre><code>imgImageView.setTag(Your Image Url); </code></pre> <p>then call your ImageLoader class Display image function . There are 3 parameters required.</p> <p>1) Image Url</p> <p>2) Your Current Class Name</p> <p>3) ImageView</p> <pre><code>imageLoader.DisplayImage(Your Image Url,ClassName.this,imgImageView); </code></pre> <p>this functon dowload images from the web and stored into the memory and show from the memory.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload