0

here I'm trying to convert my image url to bitmap so that I can display in grid view. The log.d part is working fine, I succesffully get my image url in string format ady, but when comes to decodestream part it occurred error.

public class StringtoBitmap extends AsyncTask<String, String, Bitmap> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected void onPostExecute(Bitmap s) {
        super.onPostExecute(s);
    }

    @Override
    protected Bitmap doInBackground(String... params) {
        try {
            String src = params[0];
            Log.d("SRC", src);
            URL url = new URL(src);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            input.reset();
            return myBitmap;

        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
    }
    public void StringtoBitmap(String img) {
        new StringtoBitmap().execute(img);
    }
}

some part of android monitor result:

05-09 02:56:21.408 11585-11671/com.comma.androidapp1 E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #2
                                                                       Process: com.comma.androidapp1, PID: 11585
                                                                       java.lang.RuntimeException: An error occured while executing doInBackground()
                                                                           at android.os.AsyncTask$3.done(AsyncTask.java:300)
                                                                           at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
                                                                           at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:242)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
                                                                           at java.lang.Thread.run(Thread.java:841)
                                                                        Caused by: java.lang.OutOfMemoryError
                                                                           at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
                                                                           at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:613)
                                                                           at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:589)
                                                                           at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:627)
                                                                           at com.comma.androidapp1.StringtoBitmap.doInBackground(StringtoBitmap.java:39)
                                                                           at com.comma.androidapp1.StringtoBitmap.doInBackground(StringtoBitmap.java:17)
                                                                           at android.os.AsyncTask$2.call(AsyncTask.java:288)
                                                                           at java.util.concurrent.FutureTask.run(FutureTask.java:237)
                                                                           at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
                                                                           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
                                                                           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
                                                                           at java.lang.Thread.run(Thread.java:841) 


                                                                       [ 05-09 02:56:21.418  1556: 1711 D/         ]


    HostConnection::get() New Host Connection established 0xb86734b0, tid 1711

2 Answers2

0

You are getting out of memory error ,your bitmap size is to big ,put below code to resolve out of memory error

   BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap preview_bitmap = BitmapFactory.decodeStream(is, null, options);
Sandeep dhiman
  • 1,863
  • 2
  • 17
  • 22
0

It is better to use libraries like Glide or Picasso for all image operations (decoding, resizing, downloading etc.):

Replace path with local folder path or server url

Dependency:

compile 'com.github.bumptech.glide:glide:3.5.2'

Code

Glide.with (context).load (path).into(imageView);

Using Glide to load bitmap into ImageView

Community
  • 1
  • 1
PEHLAJ
  • 9,980
  • 9
  • 41
  • 53