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

Загрузка изображения из сети, в адаптере GridView - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android С++ и android http://www.cyberforum.ru/android-dev/thread1062877.html
Привет форумчане, такая ситуация. Мой друг изучил доволи неплохо с++ , и вот натрапил на разработку под андроид и стоит перед вопросом, андроид как говорится тема перспективаня . Но учить и то и то...
Программирование Android AIR не парситься XML если просто вывожу на экран строки то ничего всё работает. нащёл в сети xml-ку - курсы волют еже дневно обновляемые пытаюсь её парсить и выводить на экран. в эмёляторе телефона всё работает нормю... http://www.cyberforum.ru/android-dev/thread1062772.html
Ошибка програмы в Андроид 4.4 Программирование Android
Есть приложение https://play.google.com/store/apps/details?id=com.testsoup.android.testv179 (Почти то же самое, но бесплатное...
Как можно отобразить что нибудь в Status Bar? Программирование Android
Здравствуйте. Нужно вывести что нибудь (текст, иконку) в status bar (там где сигнал сети :) ), но не как Notification, а постоянно. Т.е. нужно чтобы в статус баре постоянно был какой-то текст (ну...
Программирование Android Timer и AppWidgetProvider http://www.cyberforum.ru/android-dev/thread1062354.html
С Новым Годом, господа! Успехов всем в Новом Году! А мой вопрос такой: как остановить таймер в виджете... код в архиве...
Программирование Android Обновление данных приложения Здравствуйте, есть простенькое приложение, которое показывает количество дней прошедших в году и отображает прогресс года. Проблема в том что когда я сворачиваю приложение кнопкой "Домой" и на... подробнее

Показать сообщение отдельно
Sanu0074
58 / 58 / 2
Регистрация: 14.06.2010
Сообщений: 1,189
Записей в блоге: 5

Загрузка изображения из сети, в адаптере GridView - Программирование Android

05.01.2014, 02:36. Просмотров 669. Ответов 0
Метки (Все метки)

Есть адаптер, в котором открывается новый поток и грузится изображение из сети, в загружающий класс передается ссылка и данные, проблема в том что загрузка изображений не останавливается, где то допустил ошибку, помогите разобраться:

адаптер:

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
public class GridViewAdapter extends BaseAdapter {
     
    private static class ViewHolder {
        TextView name,count_download;
        ImageView icon;
        Main m;
        
        String id,url_id,script,icon_lnk,icon_name;
        
        
 
    }
 
    private Context context;
    private List<HashMap<String, String>> arrayList;
    private LayoutInflater layoutInflater;
 
 
    GridViewAdapter(Context context, List<HashMap<String, String>> data) {
        this.context = context;
        this.arrayList = data;
        layoutInflater = LayoutInflater.from(context);
    }
 
    @Override
    public int getCount() {
        return arrayList.size();
    }
 
    @Override
    public Object getItem(int position) {
        return arrayList.get(position);
    }
 
    @Override
    public long getItemId(int position) {
        return position;
    }
    
    String getName(String s){
        int dotIdx = s.lastIndexOf('.');
        int bslashIdx = s.lastIndexOf('.');
        if (dotIdx != -1 && bslashIdx != -1) {
            return s.substring(bslashIdx + 1, dotIdx);
        }
        return s;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder viewHolder;
 
        if(convertView == null) {
            convertView = layoutInflater.inflate(R.layout.main_activity_item, null);
            viewHolder = new ViewHolder();
            viewHolder.name = (TextView)convertView.findViewById(R.id.name);
            viewHolder.icon = (ImageView)convertView.findViewById(R.id.icon);
            convertView.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder)convertView.getTag();
        }
 
        Animation animation = AnimationUtils.loadAnimation(context, R.anim.rotate); 
        
        viewHolder.name.setText(arrayList.get(position).get("name"));
        viewHolder.icon.startAnimation(animation);
        viewHolder.script = arrayList.get(position).get("script");
        viewHolder.url_id = arrayList.get(position).get("url_id");
        viewHolder.id = arrayList.get(position).get("id");
        viewHolder.icon_lnk = arrayList.get(position).get("icon");
        viewHolder.icon_name = "name12";
        
        new Thread() {  //открываем новый поток
            @Override
            public void run() {
               
                
 
                       DownloadImage di = (DownloadImage) new DownloadImage(viewHolder.icon,viewHolder.script,viewHolder.id,viewHolder.icon_name).execute("http://192.168.0.20/"+viewHolder.icon_lnk);
                       try {
                        for(;;Thread.sleep(500)){   //ждем немного  (беконечный цикл ожиданий)
                            if(di.fin==true){Log.d("MyLog", "Упешная загрузка картинки #"+viewHolder.icon_lnk); break;} //если картинка загружена то выходим из этого цикла
                            else{Log.d("MyLog", "Попытка загрузки картинки #"+viewHolder.icon_lnk);}
                        }} catch (InterruptedException e) {e.printStackTrace();}
 
            }
    }.start();
        
        return convertView;
    }
 
 
}
Загрузчик:
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
public class DownloadImage extends AsyncTask<String, Void, Bitmap> { 
    public String ROOT_DIR="FolderName";
    public String FileName;
    ImageView bmImage; //сама картинка
    boolean fin=false; //окончание таска
    String contentType, id;
 
    DownloadImage(ImageView bmImage, String contentType, String id, String FileName) { 
        this.bmImage = bmImage; 
        this.contentType = contentType; 
        this.id = id; 
        this.FileName = FileName+".webp"; 
    } 
    
 
    protected Bitmap doInBackground(String... url) { 
        String urldisplay = url[0]; 
        Bitmap image = null; 
        try { 
            InputStream in = new java.net.URL(urldisplay).openStream(); 
            image = BitmapFactory.decodeStream(in); 
        } catch (Exception e) { 
            Log.e("Error", e.getMessage()); 
            e.printStackTrace(); 
        } 
        
        String root = Environment.getExternalStorageDirectory().toString();
        File Dir = new File(root + File.separator + ROOT_DIR + File.separator + contentType + id);    
        Dir.mkdirs();
 
 
        Log.d("FILE_IMAGE", FileName);
        File file = new File (Dir, FileName);
        if (file.exists ()) file.delete (); 
        try {
               FileOutputStream out = new FileOutputStream(file);
               image.compress(Bitmap.CompressFormat.WEBP, 90, out);
               out.flush();
               out.close();
 
        } catch (Exception e) {
               e.printStackTrace();
        }
        
        return image; 
    } 
    
 
    protected void onPostExecute(Bitmap result) {
        bmImage.clearAnimation();
        bmImage.setImageBitmap(result); 
        bmImage.setScaleType(ScaleType.FIT_CENTER);
        fin=true; 
    } 
}
p.s. В адаптере, есть функция getName(), которая из пути возвращает имя файла, если я её использую, то приложение вылетает....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru