@Wolfak

Почему в android фото загружаются вместе, а не по очереди в AsyncTask?

Добрый вечер. Столкнулся с проблемой при разработки клиентского приложения для android. При загрузки фотографий с сайта, фотографии грузятся, но изображения не появляются пока они все не будут загружены и резко отображаются все сразу, а мне хотелось бы чтобы они начали отображаться в процессе загрузки один на одним. Кроме того, в сам процесс загрузки приложение останавливается и ничего нельзя сделать в приложении пока загрузка не завершится, а мне хотелось бы чтобы когда фотки грузятся, то можно было перейти на другую страницу и отменить таким образом загрузку, если нужно.

Ниже представлен код загрузки изображений:
for(int i = 0; i < 15; i++) {
ImageView  PostSmallPhoto = (ImageView) findViewById(ArrIDPost[i]);
LoadImage GetContLoadImg = new LoadImage();
GetContLoadImg.execute("http://site.ru/img/" + i + ".jpg");
try {
bitmap = GetContLoadImg.get(1, TimeUnit.SECONDS);
} catch (InterruptedException e) {
} catch (ExecutionException e) {
} catch (TimeoutException e) {
}
if (bitmap != null) {
PostSmallPhoto.setImageBitmap(bitmap);
} else {
PostSmallPhoto.setBackgroundResource(R.drawable.nophoto);
}

bitmap = null;
GetContLoadImg = null;
}

private class LoadImage extends AsyncTask<String, String, Bitmap> {
@Override
protected void onPreExecute() {
super.onPreExecute();

}
protected Bitmap doInBackground(String... args) {
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent());

} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}

protected void onPostExecute(Bitmap image) {

if(!isOnline()) {
Toast toast = Toast.makeText(getApplicationContext(), getResources().getString(R.string.ForAppNeIntr), Toast.LENGTH_SHORT);
toast.show();
} else {
if (image != null) {
bitmap = image;
}
}
}
}


Как исправить код выше таким образом, чтобы фото грузились и отображались по очереди, а не ожидали пока загрузятся все фотографии? И как сделать чтобы приложение не останавливалось в момент загрузки, а работало как обычно?
Надеюсь на вашу помощь. Огромное спасибо!
  • Вопрос задан
  • 503 просмотра
Решения вопроса 1
@onepavel
Консультация и разработка мобильных приложений
Респект тебе!
Молодец, сидел ведь писал, ковырялся и разбирался!
Написать асинхронную подгрузку картинок с плавным отображением
это не тривиальная задача. Тот код, что у тебя править лучше не стоит.
Возьми проверенную библиотеку, где все что нужно реализовано.
square.github.io/picasso
почитай хабр https://habrahabr.ru/post/262189/
сравнение популярных библиотек
stackoverflow.com/questions/29363321/picasso-v-s-i...
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
itvdonsk
@itvdonsk
Android Developer
Совет по поводу пикасы верный. Но и разобраться тоже нужно.
Тебе просто нужно получать изображения в асинтаск по одному. Т.е. одно изображение - одна задача. Т.е. цикл нужно вынести за пределы асинтаска и в этом цикле собственно их запускать.
Ответ написан
ImangazalievM
@ImangazalievM
Android-программист
Android-библиотека для загрузки изображений Picasso - java-help.ru/android-picasso
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы