ams92
ams92

Reputation: 276

How to get data from AsyncTask in android?

Iv tried some on the solutions in stack overflow, but was not able to work it out for my case.

I want to get the Bitmap data from onPostExecute or bmp from doInBackground and set it to ImageView imageurl using imageurl.setImageBitmap() in the getView() method

public class BooksAdapter extends ArrayAdapter<Books> {


    public BooksAdapter(Activity context, ArrayList<Books> word) {
        super(context, 0, word);
    }

    @NonNull
    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        // Check if the existing view is being reused, otherwise inflate the view
        View listItemView = convertView;
        if (listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_item, parent, false);
        }


        // Get the {@link AndroidFlavor} object located at this position in the list
        Books currentbook = getItem(position);


        TextView bookView = (TextView) listItemView.findViewById(R.id.bookTittle);
        String booktitle = currentbook.getBookName();
        bookView.setText(booktitle);

        TextView authorView = (TextView) listItemView.findViewById(R.id.authorname);
        String authorname = currentbook.getAuthorName();
        authorView.setText(authorname);

        ImageView imageurl = (ImageView) listItemView.findViewById(R.id.imageView);
        String imagelink = currentbook.getImageLink();

        ImageAsyncTask task = new ImageAsyncTask();
        task.execute(imagelink);

    // imageurl.setImageBitmap();


        return listItemView;

    }

    private class ImageAsyncTask extends AsyncTask<String, Void, Bitmap> {


        @Override
        protected Bitmap doInBackground(String... urls) {

            URL url = null;
            Bitmap bmp = null;

            try {
                url = new URL(urls[0]);
            } catch (MalformedURLException e) {
                Log.e(LOG_TAG, "Error with creating URL ", e);
            }
            try {
                bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (IOException e) {
                Log.e(LOG_TAG, "Problem retrieving the earthquake JSON results.", e);
            }

            return bmp;


        }


        @Override
        protected void onPostExecute(Bitmap data) {


        }

    }


}

Upvotes: 2

Views: 870

Answers (1)

Jozef Dochan
Jozef Dochan

Reputation: 935

Just pass your ImageView to AsyncTask via constructor and then set image in onPostExecute like this:

ImageAsyncTask task = new ImageAsyncTask(myImageView);

private class ImageAsyncTask extends AsyncTask<String, Void, Bitmap> {
    private ImageView img;

    ImageAsyncTask(Imageview img){
       this.img = img;
    }

  ... 

    protected void onPostExecute(Bitmap data) {
        this.img.setImageBitmap(data);

    }

Upvotes: 1

Related Questions