Kutbi
Kutbi

Reputation: 1154

How can I fetch a large image from a url?

I used the code below to fetch the image from a url but it doesn't working for large images.

Am I missing something when fetching that type of image?

imgView = (ImageView)findViewById(R.id.ImageView01);
  imgView.setImageBitmap(loadBitmap("http://www.360technosoft.com/mx4.jpg"));

  //imgView.setImageBitmap(loadBitmap("http://sugardaddydiaries.com/wp-content/uploads/2010/12/how_do_i_get_sugar_daddy.jpg"));
     //setImageDrawable("http://sugardaddydiaries.com/wp-content/uploads/2010/12/holding-money-copy.jpg");
  //Drawable drawable = LoadImageFromWebOperations("http://www.androidpeople.com/wp-content/uploads/2010/03/android.png");
  //imgView.setImageDrawable(drawable);

 /* try {
     ImageView i = (ImageView)findViewById(R.id.ImageView01);
     Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://sugardaddydiaries.com/wp-content/uploads/2010/12/holding-money-copy.jpg").getContent());
     i.setImageBitmap(bitmap); 
   } catch (MalformedURLException e) {
     System.out.println("hello");
   } catch (IOException e) {
    System.out.println("hello");
   }*/
    }


 protected Drawable ImageOperations(Context context, String string,
   String string2) {
  // TODO Auto-generated method stub
  try {
   InputStream is = (InputStream) this.fetch(string);
   Drawable d = Drawable.createFromStream(is, "src");
   return d;
  } catch (MalformedURLException e) {
   e.printStackTrace();
   return null;
  } catch (IOException e) {
   e.printStackTrace();
   return null;
  }

 }

Upvotes: 8

Views: 2777

Answers (4)

KK_07k11A0585
KK_07k11A0585

Reputation: 2403

        public class MyImageActivity extends Activity 
    {
        private String image_URL= "http://home.austarnet.com.au/~caroline/Slideshows/Butterfly_Bitmap_Download/slbutfly.bmp"; 

        private ProgressDialog pd;
        private Bitmap bitmap;
        private ImageView bmImage;
        @Override
        public void onCreate(Bundle savedInstanceState) 
        {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);

                bmImage  = (ImageView)findViewById(R.id.imageview);
                pd = ProgressDialog.show(this, "Please Wait", "Downloading Image");
                DownloadWebPageTask task = new DownloadWebPageTask();
                task.execute(new String[] { image_URL }); 
                 // You can also give more images in string array

        }
        private class DownloadWebPageTask extends AsyncTask<String, Void, Bitmap> 
        {
            // String -->  parameter in execute
            // Bitmap -->  return type of doInBackground and parameter of onPostExecute
            @Override
            protected Bitmap doInBackground(String...urls) {
                String response = "";
                for (String url : urls) 
                {
                    InputStream i = null;
                     BufferedInputStream bis = null;
                     ByteArrayOutputStream out =null;

//             Only for Drawable Image          
//             try
//             {
//                 URL url = new URL(image_URL);
//                 InputStream is = url.openStream();
//                 Drawable d = Drawable.createFromStream(is, "kk.jpg");
//                   bmImage.setImageDrawable(d); 
//             }
//          catch (Exception e) {
//              // TODO: handle exception
//          }

// THE ABOVE CODE IN COMMENTS WILL NOT WORK FOR BITMAP IMAGE                    

 try
                     {
                         URL  m = new URL(image_URL);
                         i = (InputStream) m.getContent();
                         bis = new BufferedInputStream(i, 1024*8);
                         out = new ByteArrayOutputStream();
                         int len=0;
                         byte[] buffer = new byte[4096];
                         while((len = bis.read(buffer)) != -1)
                         {
                             out.write(buffer, 0, len);
                         }
                         out.close();
                         bis.close();

                     byte[] data = out.toByteArray();
                     bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
                     }
                     catch (Exception e) 
                     {
                        e.printStackTrace();
                     }
                     }

                return bitmap;
            }

            @Override
            protected void onPostExecute(Bitmap result) 
            {
                if(result!=null)
                bmImage.setImageBitmap(result);
                pd.dismiss();
            }
        }
    }

Upvotes: 0

KK_07k11A0585
KK_07k11A0585

Reputation: 2403

If you want to download the image very quickly then you can use AQuery which is similar to JQuery just download the android-query.0.15.7.jar

Import the jar file and add the following snippet

 AQuery aq = new AQuery(this);   
 aq.id(R.id.image).image("http://4.bp.blogspot.com/_Q95xppgGoeo/TJzGNaeO8zI/AAAAAAAAADE/kez1bBRmQTk/s1600/Sri-Ram.jpg");   

// Here R.id.image is id of your ImageView 
// This method will not give any exception 
// Dont forgot to add Internet Permission

Upvotes: 2

ChandreshKanetiya
ChandreshKanetiya

Reputation: 2414

see this good example that loads image from server. blog.sptechnolab.com/2011/03/04/android/android-load-image-from-url/.

Upvotes: 3

st0le
st0le

Reputation: 33545

You're trying to download the Large Image from within the UI Thread....This will cause an ANR (Application not Responding)

Use AsyncTask to download the images, that way, a seperate thread will be used for the download and your UI Thread wont lock up.

Upvotes: 5

Related Questions