обработать загрузку 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);