Load Image in ImageView from URL stored in JSONString in Android

前端 未结 5 732
梦如初夏
梦如初夏 2021-01-13 13:31

I have a JSON string, say a name and a Url . I need to extract name into the TextView and extract and display image in ImageView. Belo

5条回答
  •  情歌与酒
    2021-01-13 14:13

    You can do something like this.

             public static final String JSON_STRING="{"WebImages":{"Imagename":"image_name","imageurl":http://www.example.com/image/example.png}}";
        private ImageLoader _ImageLoader;
    
                        try {
                JSONObject _jObj = new JSONObject(JSON_STRING);
                JSONObject _jSubObj = _jObj .getJSONObject("WebImages");
            String _imageName= _jSubObj.getString("Imagename");
    YOUR_TEXTVIEW.setText(_imageName);
            String _imageURL= _jSubObj.getString("imageurl");
          _ImageLoader = new ImageLoader(CURRENT_ACTIVITY.this);
           _ImageLoader.DisplayImage(_imageURL,
                            R.drawable.ic_launcher, YOUR_IMAGEVIEW);
                    } catch (JSONException e) {
                                            // TODO Auto-generated catch block
    
                                            e.printStackTrace();
                                        }
    
    
        public class ImageLoader {
    
            MemoryCache memoryCache=new MemoryCache();
            FileCache fileCache;
            private Map     imageViews=Collections.synchronizedMap(new WeakHashMap());
            ExecutorService executorService; 
    
            public ImageLoader(Context context){
                fileCache=new FileCache(context);
                executorService=Executors.newFixedThreadPool(5);
            }
    
            int stub_id = R.drawable.ic_launcher;
            public void DisplayImage(String url, int loader, ImageView imageView)
            {
                try {
    
                    stub_id = loader;
                    imageViews.put(imageView, url);
                    Bitmap bitmap=memoryCache.get(url);
                    if(bitmap!=null)
                        imageView.setImageBitmap(bitmap);
                    else
                    {
                        queuePhoto(url, imageView);
    
                        imageView.setImageResource(loader);
    
    
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            private void queuePhoto(String url, ImageView imageView)
            {
                PhotoToLoad p=new PhotoToLoad(url, imageView);
                executorService.submit(new PhotosLoader(p));
            }
    
            public Bitmap getBitmap(String url)
            {
                File f=fileCache.getFile(url);
    
                //from SD cache
                Bitmap b = decodeFile(f);
                if(b!=null)
                    return b;
    
                //from web
                try {
                    Bitmap bitmap=null;
                    URL imageUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
                    conn.setConnectTimeout(30000);
                    conn.setReadTimeout(30000);
                    conn.setInstanceFollowRedirects(true);
                    InputStream is=conn.getInputStream();
                    OutputStream os = new FileOutputStream(f);
                    Utils.CopyStream(is, os);
                    os.close();
                    bitmap = decodeFile(f);
                    return bitmap;
                } catch (Exception ex){
                    ex.printStackTrace();
                    return null;
                }
    
            }
    
            public Bitmap getFacebookImage(String userId) {
                // TODO Auto-generated method stub
                Bitmap bitmap = null;
    
                try {
    
                HttpGet httpRequest = new HttpGet(
                URI.create(userId));
                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response = (HttpResponse) httpclient
                .execute(httpRequest);
                HttpEntity entity = response.getEntity();
                BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(
                entity);
                bitmap = BitmapFactory
                .decodeStream(bufHttpEntity
                .getContent());
                httpRequest.abort();
    
                } catch (Exception e) {
                e.printStackTrace();
                }
                return bitmap;
                }
    
            //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=200;
                //  int width_tmp=o.outWidth, height_tmp=o.outHeight;
                //  int scale=1;
                //  while(true){
                //      if(width_tmp/2

提交回复
热议问题