8

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;
  }

 }
greatwolf
  • 20,287
  • 13
  • 71
  • 105
Kutbi
  • 1,154
  • 2
  • 18
  • 32
  • I'm pretty sure `loadBitmap` plainly downloads the file...without using a thread, am i right? – st0le Jan 01 '11 at 08:43

4 Answers4

5

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.

st0le
  • 33,375
  • 8
  • 89
  • 89
  • st0le is right. Use an AsyncTask... for example: http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html – RyanM Aug 13 '11 at 08:26
3

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

AJPatel
  • 2,291
  • 23
  • 42
ChandreshKanetiya
  • 2,414
  • 5
  • 27
  • 41
2

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
KK_07k11A0585
  • 2,381
  • 3
  • 26
  • 33
  • AQuery is excellent, even if you only ever use for async image getting it's well worth checking out. – scottyab Feb 02 '12 at 19:30
0
        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();
            }
        }
    }
KK_07k11A0585
  • 2,381
  • 3
  • 26
  • 33