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

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

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

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

05.01.2014, 02:36. Просмотров 666. Ответов 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(), которая из пути возвращает имя файла, если я её использую, то приложение вылетает....
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2014, 02:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Загрузка изображения из сети, в адаптере GridView (Программирование Android):

Загрузки изображений из сети в адаптере GridView - Программирование Android
Загружаю картинки в адаптере gridview: //.. viewHolder.name.setText(arrayList.get(position).get(&quot;name&quot;)); ...

Загрузка изображения - Программирование Android
сейчас загружаю так BitmapFactory.decodeResource(context.getResources(), R.drawable.angle_ld) и прорисовываю так ...

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

Загрузка изображения - Программирование Android
Привет всем, народ помогите пожалуйста, нужно загрузить изображения из произвольного место на устройстве, как это можно сделать? может кто...

Загрузка изображения в imageview - Программирование Android
Всем привет. Возникла проблема, распарсил сайт в arraylist, сохранил в БД, далее мне нужно вывести сайт на активность. Делаю так: ...

Загрузка изображения jpg.to - Программирование Android
Есть такой сервис — jpg.to. Про ссылке любое_слово.jpg.to отдает изображение. Как загрузить это изображение с помощью universal image...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2014, 02:36
Привет! Вот еще темы с ответами:

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

RecyclerView.Adapter загрузка изображения - Программирование Android
При прокрутке RecycleView в ImageView загружается необходимая фотография.. Но при прокрутке почему то начинаются не состыковки.. (как...

Дополнительный функционал paint (загрузка изображения) - Программирование Android
Имеется код программы. import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import...

Android Загрузка изображения на стену vkontakte - Программирование Android
Здравствуйте всем, возникла необходимость загрузить фотографию на стену вконтакте. На сайте разработчиков есть статья Загрузка файлов ...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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