Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 39, средняя оценка - 4.67
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
#1

Динамическая загрузка картинок из интернета - Программирование Android

15.01.2014, 17:01. Просмотров 5334. Ответов 7
Метки нет (Все метки)

Добрый день.
Пишу спец. rss реадер для одного сайта. И столкнулся с проблемой. К примеру есть у меня список новостей (листвью), в котором должна быть картинка и заголовок новости. Есть урл данной картинки. Гуглил, но нашел старое решение, где не надо был отдельный поток на это дело. ТАк вот вопрос: как мне загружать данные фотки в реальном времени, не сохраняя на девайс?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2014, 17:01
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамическая загрузка картинок из интернета (Программирование Android):

Загрузка картинок Picasso из дискового кэша, когда нет интернета - Программирование Android
Подскажите как можно при помощи Picasso реализовать загрузку картинок в фон активити, когда нет интернета? public class MainActivity...

Динамическая загрузка в ListView - Программирование Android
Добрый день ув. Программисты. 3й день в безуспешных поисках. Точнее поиски успешны, но как прикрутить к своему проекту.... не...

Загрузка изображения из интернета в imageview - Программирование Android
Доброго, передаю из одной активити в другую ссылку на картинку, она прямая, как мне ее вывести в imageview?

Загрузка картинок в определенное место текста WebView - Программирование Android
Дан текст в WebView, нужно в определенных местах текста вставлять картинки Добавлено через 42 минуты Текст загружается в WebView из...

Загрузка и отображение большого количества картинок с памяти телефона - Программирование Android
Если изображения больше 10, то начинаются заметные тормоза, если больше 100, то программа падает с ошибкой памяти у меня есть массив,...

AS 2.0 Динамическая загрузка картинок - ActionScript
Добырй день! Необходимо в цикле загружать одну и туже картинку друг за другом, сейчас это выглядит так: //цикл while ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Netscape
372 / 359 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
15.01.2014, 17:11 #2
Самое простое решение, использовать то, что уже написано:
https://github.com/nostra13/Android-...l-Image-Loader
1
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
15.01.2014, 18:07 #3
Если не хотите юзать сторонние библиотеки, то вот пример без наворотов:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final ImageView iv = new ImageView(this);
        setContentView(iv);
        Thread t = new Thread()  {
            @Override
            public void run() {
                try {
                    final Bitmap bitmap = BitmapFactory.decodeStream(new URL("http://st0.vk.me/images/hatf.gif").openStream());
                    iv.post(new Runnable() {
                        @Override
                        public void run() {
                            iv.setImageBitmap(bitmap);
                        }
                    });
                } catch (Exception e) { e.printStackTrace(); } 
            };
        };
        t.start();
    } 
}
Но я все-таки бы порекомендовал AsyckTask, с ним код красивей и его все любят
Загрузка это еще не самая главная проблема, вам еще предстоит написать код который будет изменять размер этих картинок до оптимального, и выгружать те картинки которые пользователь уже не видит на экране из-за того что прокрутил список... А иначе будет возникать OutOfMemoryError
1
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
15.01.2014, 18:40  [ТС] #4
Загрузка это еще не самая главная проблема, вам еще предстоит написать код который будет изменять размер этих картинок до оптимального, и выгружать те картинки которые пользователь уже не видит на экране из-за того что прокрутил список... А иначе будет возникать OutOfMemoryError
У меня будет не больше 20 картинок в списке.
Если это вызовет ошибку, то как это исправить?
И еще очень прошу помочь вот с этим вопросом: UI rss читалки
Я сам программист salesforce, и в андройд программировании я пока очень слаб.
Если не сделаю это прогу, начальство меня укокошит.
0
angryrobot
Командир зеленых роботов
348 / 285 / 53
Регистрация: 08.10.2013
Сообщений: 564
15.01.2014, 19:07 #5
Цитата Сообщение от VictorAkira Посмотреть сообщение
У меня будет не больше 20 картинок в списке.
Если это вызовет ошибку, то как это исправить?
20 картинок проблем не создадут, особенно если уменьшать их разрешение сразу после загрузки.
0
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
16.01.2014, 19:22  [ТС] #6
Ох... Не грузится нефига...
Лайаут
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="utf-8"?>
 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
 
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_title"/>
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Text"
            android:id="@+id/txt_text"/>
 
    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
    
</LinearLayout>
Класс
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.android.slidingmenuexample;
 
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
public class CustomAdapter extends BaseAdapter {
    private static final String TAG = "MyApp"; 
    private List<StringWrapper> data = new ArrayList<StringWrapper>();  //Наша коллекция
    private LayoutInflater inflater;
 
    public CustomAdapter(Context mContext) {
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //Инфлейтер чтобы получить View из XML
    }
 
    public void setData(List<StringWrapper> data) {
        this.data = data;
    }
 
    @Override
    public int getCount() {
        return data.size();
    }
 
    @Override
    public StringWrapper getItem(int i) {
        return data.get(i);
    }
 
    @Override
    public long getItemId(int i) {
        return i;
    }
 
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflater.inflate(R.layout.simple_list_item, null);
        StringWrapper currentItem = getItem(i);
        TextView.class.cast(view.findViewById(R.id.txt_text)).setText(currentItem.getText());
        TextView.class.cast(view.findViewById(R.id.txt_title)).setText(currentItem.getimgUrl());
        final ImageView iv = ImageView.class.cast(view.findViewById(R.id.imageView1));
        final StringWrapper currentItemToImg = getItem(i);
        final String error;
        Thread t = new Thread()  {
            @Override
            public void run() {
                try 
                {
                    final Bitmap bitmap = BitmapFactory.decodeStream(new URL(currentItemToImg.getimgUrl()).openStream());
                    iv.post(new Runnable()
                    {
                        @Override
                        public void run() 
                        {
                            iv.setImageBitmap(bitmap);
                        }
                    });
                } 
                catch (Exception e) 
                { 
                    //e.printStackTrace(); 
                     Log.e(TAG, "Получено исключение", e);
                } 
            };
        };
        t.start();       
        return view;
    }
 
}
Ссылку выводит, но вот картинки нету. Если ошибка я не знаю. Касяк, но не знаю как дебажить в таких случаях.

Добавлено через 57 минут
Вероятно что то не правильно делаю.
Как в данном примере сделать?
iv - ImageView на лайауте
currentItemToImg.getimgUrl() - Урл Картинки.

Добавлено через 4 часа 23 минуты
Но я все-таки бы порекомендовал AsyckTask, с ним код красивей и его все любят
Сам его использую, для парсинга xml.
Однако не получилось применить для загрузки картинок в ImageView.
Хотелось бы узнать как это сделает)
ДУмаю с такими проблемами сталкивается каждый начинающий прогер на андройде, поэтому если кто то даст работающий код, многим он будет полезен.
0
Netscape
372 / 359 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
16.01.2014, 19:46 #7

Не по теме:

Цитата Сообщение от angryrobot Посмотреть сообщение
Но я все-таки бы порекомендовал AsyckTask, с ним код красивей и его все любят
Более ущербного класса нет.



Добавлено через 16 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class LoadImage extends AsyncTask<Object, Void, Bitmap>{
 
        private ImageView imv;
        private String path;
 
        public LoadImage(ImageView imv) {
             this.imv = imv;
             this.path = imv.getTag().toString();
        }
 
    @Override
    protected Bitmap doInBackground(Object... params) {
        Bitmap bitmap = null;
        File file = new File( 
                Environment.getExternalStorageDirectory().getAbsolutePath() + path);
 
        if(file.exists()){
            bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
        }
 
        return bitmap;
    }
    @Override
    protected void onPostExecute(Bitmap result) {
        if (!imv.getTag().toString().equals(path)) {
               /* The path is not same. This means that this
                  image view is handled by some other async task. 
                  We don't do anything and return. */
               return;
        }
 
        if(result != null && imv != null){
            imv.setVisibility(View.VISIBLE);
            imv.setImageBitmap(result);
        }else{
            imv.setVisibility(View.GONE);
        }
    }
 
}
Здесь загрузка с памяти девайса, но суть та же. Картинка, ставим тег(ссылка на нее), грузим, проверяем, отображаем.
0
VictorAkira
3 / 3 / 0
Регистрация: 21.03.2013
Сообщений: 71
17.01.2014, 16:34  [ТС] #8
Эм... Может для Вас это и одно и тоже, но мне как нубу это весьма сложно(.

Добавлено через 19 часов 33 минуты
Что то у меня не получается применить данный класс:
мой класс:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package com.android.slidingmenuexample;
 
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
 
import com.android.slidingmenuexample.Mir.NewThread;
 
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
public class CustomAdapter extends BaseAdapter {
    public ImageView IV;
    public String URL;
    private static final String TAG = "MyApp"; 
    private List<StringWrapper> data = new ArrayList<StringWrapper>();  //Наша коллекция
    private LayoutInflater inflater;
 
    public CustomAdapter(Context mContext) {
        inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); //Инфлейтер чтобы получить View из XML
    }
 
    public void setData(List<StringWrapper> data) {
        this.data = data;
    }
 
    @Override
    public int getCount() {
        return data.size();
    }
 
    @Override
    public StringWrapper getItem(int i) {
        return data.get(i);
    }
 
    @Override
    public long getItemId(int i) {
        return i;
    }
 
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        view = inflater.inflate(R.layout.simple_list_item, null);
        StringWrapper currentItem = getItem(i);
        TextView.class.cast(view.findViewById(R.id.txt_text)).setText(currentItem.getTitle());
        URL = currentItem.getText();
        IV = (ImageView) view.findViewById(R.id.imageView1);
        TextView.class.cast(view.findViewById(R.id.txt_title)).setText(currentItem.getText());   
        return view;
    }
}
Прошу помощи!

Добавлено через 12 минут
Решение: http://stackoverflow.com/questions/2...url-in-android
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2014, 16:34
Привет! Вот еще темы с ответами:

Динамическая загрузка картинок на окно. - C# WPF
Есть XML файл с списком ссылок на небольшие(и большие) картинки. Автоматически создаются N usercontrol на панели. необходимо скачать эти...

Поиск и загрузка картинок из интернета - CMD/BAT
Задача такова: загрузить из интернета заданное количество картинок заданной категории и разрешения и запаковать в заданный архив ...

Загрузка картинок с сжатием и конвертированием изображения + массовая загрузка - PHP
Приветствую форумчане Я можно сказать что новичок в PHP но сайты пишу уже давно, и столкнулся с тем что мне нужно огромный архив на...

WPF, скачивание картинок из интернета - C# ASP.NET
Здравствуйте! Необходимо скачать картинки из Интернета и мне нужно, чтобы скачиваемые картинки отображались на странице wpf, но после сбоев...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.01.2014, 16:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru