обработать загрузку ImageView из URL в методе функции

не знаю, как правильно будет обработать загрузку URL ImageView в функции loadPhotoIntoImageView не используя библиотки вроде Picasso. С Picasso все прекрасно работает.

class PhotosViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val imageViewPhoto: ImageView = itemView.findViewById(R.id.imageViewPhoto)
        private val textViewTitle: TextView = itemView.findViewById(R.id.textViewTitle)

        fun bind(photo: Photo) {
            textViewTitle.text = photo.title
            loadPhotoIntoImageView(photo.url, imageViewPhoto)
        }

        private fun loadPhotoIntoImageView(url: String, imageView: ImageView) {
            //Picasso.get().load(url).into(imageViewPhoto)
        }
    }

Ответы (1 шт):

Автор решения: Tiarait

Рекомендую не изобретать велосипед а воспользоваться какой то библиотекой.

Если же загружать изображение вручную, то нужно это хотя бы в AsyncTask.

Дальше пойдет копипаст из статьи на medium


Внутри метода doInBackground в AsyncTask вам необходимо:

  • Создать переменную Bitmap
  • Откройте InputStream с URL-адресом, который был передан в AsyncTask
  • Используйте BitmapFactory.decodeStream() в InputStream
  • Присвоить его созданной переменной Bitmap.

Затем в методе onPostExecute просто используете setImageBitmap в объекте ImageView, чтобы добавить изображение, как вы можете видеть ниже.

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;
    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }

    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap bmp = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            bmp = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return bmp;
    }
    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

В результате в loadPhotoIntoImageView вы можете использовать след код

new DownloadImageTask(imageView).execute(url);
→ Ссылка