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

Заполнение ListView в AsyncTask - Программирование Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Преобразование EditText в Double http://www.cyberforum.ru/android-dev/thread1411782.html
Здравствуйте, понемногу изучаю андроид и вот уперся в проблему, точнее в не знание. Есть EditText в нем указал что можно вводить только десятичные числа. А вот теперь сама проблема как правильно...
Программирование Android Android Studio. Установка приложения на эмулятор. Application Installation Failed С недавних пор перестали устанавливаться на эмулятор абсолютно все мои приложения. Даже только что созданный пустой проект не устанавливается. Все время вываливается ошибка на скрине. Как исправить... http://www.cyberforum.ru/android-dev/thread1411701.html
Как сохранять добавленное в ListView поле? Программирование Android
День добрый. Подскажите как можно сохранять добавленное поле , что бы в следующий раз при запуске приложения оно было и добавлять к имеющимся уже public class MainActivity extends Activity { ...
Обработка нажатия на RadioButton Программирование Android
Постигаю андроид. Не могу разобраться со свичем. EditText принимает число, сохранил его, дальше выбираю RadioBatton и нифига не происходит) public void onClick(View view) { ...
Программирование Android Изменять изображение в зависимости от количества нажатий http://www.cyberforum.ru/android-dev/thread1411622.html
Всем привет , помогите нубу) Как сделать чтобы , кликая на кнопку, допустим 100 раз появилось изображение ,200 раз другое public class MainActivity extends ActionBarActivity { public int...
Программирование Android Не идет скачивание файлов через приложение Добрый день. Создал приложение с помощью iframe. Скачал, установил на телефон. Запустил приложение, и при нажатии на скачивание файла ничего не происходит. Вроде установил все плагины для файлов. В... подробнее

Показать сообщение отдельно
Radeon
0 / 0 / 0
Регистрация: 09.06.2014
Сообщений: 18

Заполнение ListView в AsyncTask - Программирование Android

03.04.2015, 19:07. Просмотров 904. Ответов 3
Метки (Все метки)

Нужно заполнить ListView картинками, которые скачиваются в AsyncTask с помощью Picasso. Картинки скачиваются нормально, ArrayList и ArrayAdapter заполняются, но при adapter.notifyDataSetChanged(); в onProgressUpdate(); вылезает Exception - ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
В чём проблема и как лучше решить данную задачу? (Асинхронное заполнение listView картинками из интернета)

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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
public static class PlaceholderFragment extends Fragment {
 
        private static final String ARG_SECTION_NUMBER = "section_number";
 
        private static final String JSON_PHOTO = "photo";
        private static final String JSON_TITLE = "title";
        private static final String JSON_DESCRIPTION = "description";
        private static final String JSON_HALL = "hall";
        private static final String JSON_PRICE = "price";
 
 
        /**
         * Returns a new instance of this fragment for the given section
         * number.
         */
        public static PlaceholderFragment newInstance(int sectionNumber) {
            PlaceholderFragment fragment = new PlaceholderFragment();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }
 
        public PlaceholderFragment() {
        }
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_event_list, container, false);
            Context context = getActivity().getApplicationContext();
 
            TextView tvTitle = (TextView)rootView.findViewById(R.id.eventsListTitle);
 
            ListView listView = (ListView)rootView.findViewById(R.id.eventsListView);
            ArrayList<Bitmap> bitmaps = new ArrayList<Bitmap>();
            ArrayAdapter<Bitmap> adapter = new ArrayAdapter<Bitmap>(context, R.layout.list_item ,bitmaps);
            listView.setAdapter(adapter);
 
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
            String startDate = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
            String params; //передаётся на сервер
 
            switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
                case 1: //"на этой неделе". От сегодня до последнего дня недели
                    tvTitle.setText(R.string.eventsList_title_section1);
                    Calendar cal1 = Calendar.getInstance();
                    //Берём последний день нашей недели
                        //У американцев неделя начинается с воскресенья, поэтому сначала переходим на след. неделю, а потом берём её первый день
                    cal1.add(Calendar.WEEK_OF_YEAR, 1);
                    cal1.add(Calendar.DAY_OF_WEEK, -1*cal1.get(Calendar.DAY_OF_WEEK)+1); //Получаем воскресенье текущее.
                    String end_date = dateFormat.format(new Date(cal1.getTimeInMillis()));
                    params = "start_date="+startDate+"&end_date="+end_date;
                    (new AsyncFillListView(context, adapter,bitmaps)).execute(params);
                    break;
                case 2:
                    tvTitle.setText(R.string.eventsList_title_section2);
                    params = "start_date="+startDate;
                    //new AsyncFillListView(context, handler).execute(params);
                    break;
            }
 
 
            return rootView;
        }
 
 
 
        private class AsyncFillListView extends AsyncTask<String, Void, Void> {
 
            Context context;
            ArrayList<Bitmap> bitmaps;
            ArrayAdapter<Bitmap> adapter;
 
 
            public AsyncFillListView(Context context, ArrayAdapter<Bitmap> adapter, ArrayList<Bitmap> bitmaps) {
                super();
                this.context = context;
                this.bitmaps = bitmaps;
                this.adapter = adapter;
 
            }
 
            @Override
            protected void onProgressUpdate(Void... values) {
                super.onProgressUpdate(values);
                adapter.notifyDataSetChanged();
            }
 
            @Override
            protected Void doInBackground(String... params) {
 
                try {
                    //Скачивание JSON по url
                    URL url = new URL("http://heabe.besaba.com/getEvents.php?"+params[0]);
                    URLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.connect();
                    InputStream inputStream = urlConnection.getInputStream();
                    StringBuffer buffer = new StringBuffer();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                    String line;
                    while ((line = reader.readLine()) != null) {
                        buffer.append(line);
                    }
                    String stringJSON = buffer.toString();
                    //Приведение к jsonArray
                    JSONArray jsonArray = new JSONArray(stringJSON);
                    for(int i=0;i<jsonArray.length();i++) {
                        JSONObject jsonObject = jsonArray.getJSONObject(i);
                        Bitmap bitmap = Picasso.with(context).load(Uri.parse(jsonObject.getString(JSON_PHOTO))).get();
                        bitmaps.add(bitmap);
                        onProgressUpdate();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
 
        }
 
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru