playmaker420
playmaker420

Reputation: 1537

How do i return a bitmap from an Asyncronous task

im fetching an image from internet using the below code using an Async task,But the bitmp returns from the function is always null.

private Bitmap asyncTaskFetchImage(final String imgeurl) {
        // TODO Auto-generated method stub

        new AsyncTask<Object, Object, Object>() {

            @Override
            protected void onPreExecute() {

                progress_Dialog = ProgressDialog.show(this, "", "Loading");
            }

            @Override
            protected Object doInBackground(Object... params) {
                // TODO Auto-generated method stub
                try
                {
                toSendBg=LoadImageFromURL(imgeurl);
                System.gc();
                return 0;
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
                return 0;
            }
            @Override
            protected void onPostExecute(Object result) {
                if (progress_Dialog != null) {

                    progress_Dialog.dismiss();

                }

            }

        }.execute();
        return toSendBg;
    }

Is this the exact way to return value from an Asyntask?

Upvotes: 0

Views: 113

Answers (2)

MKB
MKB

Reputation: 7619

private Bitmap asyncTaskFetchImage(final String imgeurl) {
    Bitmap bmp=null;
    new AsyncTask<Object, Object, Object>() {
    ...

and in your doInBackground method change return to

return toSendBg;

and

@Override
protected void onPostExecute(Object result) {
    if (progress_Dialog != null) {
        progress_Dialog.dismiss();
        bmp=(Bitmap)result;
    }
}
}.execute();
return bmp;

Try this..,.

Upvotes: 1

Dipak Keshariya
Dipak Keshariya

Reputation: 22291

Try below code to download image from web using AsyncTask and display in imageview.

public class MainActivity extends Activity {

    ImageView mImgView1;
    static Bitmap bm;
    ProgressDialog pd;
    String imageUrl = "https://www.morroccomethod.com/components/com_virtuemart/shop_image/category/resized/Trial_Sizes_4e4ac3b0d3491_175x175.jpg";
    BitmapFactory.Options bmOptions;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mImgView1 = (ImageView) findViewById(R.id.mImgView1);
        pd = ProgressDialog.show(MainActivity.this, "Aguarde...",
                "Carregando...");
        new ImageDownload().execute("");
    }

    public class ImageDownload extends AsyncTask<String, Void, String> {

        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            bmOptions = new BitmapFactory.Options();
            bmOptions.inSampleSize = 1;
            loadBitmap(imageUrl, bmOptions);
            return imageUrl;
        }

        protected void onPostExecute(String imageUrl) {
            pd.dismiss();
            if (!imageUrl.equals("")) {
                mImgView1.setImageBitmap(bm);
            } else {
                Toast.makeText(MainActivity.this,
                        "Não foi possível obter resultados", Toast.LENGTH_LONG)
                        .show();
            }
        }

    }

    public static Bitmap loadBitmap(String URL, BitmapFactory.Options options) {
        InputStream in = null;
        try {
            in = OpenHttpConnection(URL);
            bm = BitmapFactory.decodeStream(in, null, options);
            in.close();
        } catch (IOException e1) {
        }
        return bm;
    }

    private static InputStream OpenHttpConnection(String strURL)
            throws IOException {
        InputStream inputStream = null;
        URL url = new URL(strURL);
        URLConnection conn = url.openConnection();

        try {
            HttpURLConnection httpConn = (HttpURLConnection) conn;
            httpConn.setRequestMethod("GET");
            httpConn.connect();

            if (httpConn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                inputStream = httpConn.getInputStream();
            }
        } catch (Exception ex) {
        }
        return inputStream;
    }
}

Upvotes: 1

Related Questions