loading images from url in json to listview

前端 未结 1 1049
無奈伤痛
無奈伤痛 2021-01-17 05:26

I\'d like to load images from json data which contains the url to these images into a listview,,, the class implementing the json data has the following code:



        
1条回答
  •  遥遥无期
    2021-01-17 05:49

    u have loading the image json parsing. u have use image loader.

    Imageloader.java class

    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 cache=new HashMap();
    
        private File cacheDir;
    
        public ImageLoader(Context context){
            //Make the background thead low priority. This way it will not affect the UI performance
            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(),"LazyList");
            else
                cacheDir=context.getCacheDir();
            if(!cacheDir.exists())
                cacheDir.mkdirs();
        }
    
        final int stub_id=R.drawable.stub;
        public void DisplayImage(String url, Activity activity, ImageView imageView)
        {
            if(cache.containsKey(url))
                imageView.setImageBitmap(cache.get(url));
            else
            {
                queuePhoto(url, activity, imageView);
                imageView.setImageResource(stub_id);
            }    
        }
    
        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();
        }
    
        private Bitmap getBitmap(String url) 
        {
    
            //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;
                DataInputStream input = null;
            //    InputStream is=new URL(url).openStream();
                String auth = android.util.Base64.encodeToString(("devneoauto" + ":" + "2kk0rnpnpvir")
                     .getBytes("UTF-8"), android.util.Base64.NO_WRAP);
    
                HttpClient client = new DefaultHttpClient();
                HttpGet getmethod = new HttpGet(url);
    
                getmethod.addHeader("Authorization", "Basic " + auth);
                getmethod.addHeader("X-ZFWS-Accept", "text/json");
    
                HttpResponse responseGet = client.execute(getmethod);
                HttpEntity resEntityGet = responseGet.getEntity();
    
                if (resEntityGet != null) {
    
                    input = new DataInputStream(responseGet.getEntity().getContent());
    
                }
    
                OutputStream os = new FileOutputStream(f);
                Utils.CopyStream(input, os);
                os.close();
                bitmap = decodeFile(f);
                return bitmap;
            } catch (Exception ex){
               ex.printStackTrace();
               return null;
            }
        }
    
        //decodes image and scales it to reduce memory consumption
        private Bitmap decodeFile(File f){
            try {
                //decode image size
                BitmapFactory.Options o = new BitmapFactory.Options();
                o.inJustDecodeBounds = true;
                BitmapFactory.decodeStream(new FileInputStream(f),null,o);
    
                //Find the correct scale value. It should be the power of 2.
                final int REQUIRED_SIZE=70;
                int width_tmp=o.outWidth, height_tmp=o.outHeight;
                int scale=1;
                while(true){
                    if(width_tmp/2 photosToLoad=new Stack();
    
            //removes all instances of this ImageView
            public void Clean(ImageView image)
            {
                for(int j=0 ;j

    This class use by this method imageloader.DisplayImage(UserSearchResponse.Book_image2.get(position), Book.this, Bookphoto);

    where UsersearchResponse.Book.get(position) use for image url pasrsing for json 
    Book.this for where this Activity in class for example Book is class 
        Bookphoto for where this is ImageView
    

    I m sure this code help u

    0 讨论(0)
提交回复
热议问题