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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 36, средняя оценка - 4.94
Critically
10 / 10 / 0
Регистрация: 14.03.2011
Сообщений: 337
#1

Передать массив в другую Activity - Android

14.12.2012, 16:02. Просмотров 4624. Ответов 15
Метки нет (Все метки)

Добрый день, хотел узнать как передать массив в другую активность, что бы в дальнейшем можно было из массива вытаскивать значения и записывать эти значения в listview.

Тоесть у меня есть два массива они заполняются в pullparsere когда он находит определенный старт тэг <group> в один массив идут значения nexttext(); в другой getattributevalue(0);

Вот массив с текстом надо отобразить в другой активити в Listview, а значения атрибутов просто передать в активность что бы можно было с ними работать...

Добавлено через 3 часа 46 минут
Вот так передаю:
Java
1
2
3
4
5
    Bundle b=new Bundle();                                
                b.putStringArray("key1", cats);
            Intent activ=new Intent(MainActivity.this, AboutActivity.class);
            activ.putExtras(b);
                startActivity(activ);
Вот так я принимаю значения:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
     public void onClick(View v){
        String key1 ="";
        Bundle b=this.getIntent().getExtras();
        String[] catsarray=b.getStringArray(key1);                        <----- catsarray всегда null
        ListView lvMain = (ListView) findViewById(R.id.listView1);
 
        // создаем адаптер
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, catsarray);
        // присваиваем адаптер списку
        lvMain.setAdapter(adapter);
        
    }
Но почему то значение catsarray всегда приходить null... Помогите пожалуйста понять почему...

Добавлено через 10 минут
А все нашел ошибку...
Java
1
String key1=""
нужно убрать, а
Java
1
String[] catsarray=b.getStringArray("key1");
ключ взять в кавычки... Но возник следующий вопрос... После этого всего вылетает ошибка NullPointerException подскажите в чем может быть дело ?

Добавлено через 24 минуты
Ошибка NullPointException решена... Возникала из за того что у меня был массив заданной длины 50 но он не наполнялся целиком и имел вид [item1,item2,item3,null,null.....null] из за этих null и возникала ошибка, так как listview не мог их прочитать...

Решение: вместо массива использовать Arraylist
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dubok79
 Аватар для dubok79
323 / 121 / 11
Регистрация: 01.11.2012
Сообщений: 586
16.12.2012, 19:37     Передать массив в другую Activity #2
.....
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
19.04.2015, 20:08     Передать массив в другую Activity #3
А если нужно передать массив объектов своего класса? Типа Product.

Добавлено через 3 часа 39 минут
И возникает такой вопрос. Между активити передаются ОБЪЕКТЫ, а не ССЫЛКИ на них?
К примеру, если мне нужно передать массив моих объектов, то передаваться будут полностью все данные, а не ссылка на этот массив?
Паблито
резкий
1964 / 1699 / 526
Регистрация: 12.05.2014
Сообщений: 6,054
Завершенные тесты: 1
20.04.2015, 08:38     Передать массив в другую Activity #4
сделай классс любой и в нем статическое поле-массив и передавай через него
не мучайся
советы перфекционистов про банды не слушай, прийдет время и ты сам поймешь - тут только бандл, никаких статиков, а пока....
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
20.04.2015, 09:13     Передать массив в другую Activity #5
Цитата Сообщение от lihusha Посмотреть сообщение
А если нужно передать массив объектов своего класса? Типа Product.
Класс должен реализовать интерфейс Serializable. Потом его можно будет положить в интент
Java
1
intent.putSerializable("key", myClassArray);
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
20.04.2015, 09:27     Передать массив в другую Activity #6
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Класс должен реализовать интерфейс Serializable. Потом его можно будет положить в интент
Я реализовал через Parcelable. Работает. Допустимо?

Добавлено через 1 минуту
Цитата Сообщение от Паблито Посмотреть сообщение
сделай классс любой и в нем статическое поле-массив и передавай через него
думаю, это самый простой вариант)
а в чем разница в принципе между способом с бандлом и статическим массивом?
Паблито
резкий
1964 / 1699 / 526
Регистрация: 12.05.2014
Сообщений: 6,054
Завершенные тесты: 1
20.04.2015, 09:38     Передать массив в другую Activity #7
Цитата Сообщение от lihusha Посмотреть сообщение
а в чем разница в принципе между способом с бандлом и статическим массивом?
разница огромная, это вообще разные вещи
грубо говоря тебе надо перенести чашку чая из кухни в спальню
в случае с putExtras() ты вызываешь логистическую компанию, приходит курьер, бережно упаковывает твою чашку, все описывает, оформляет страховку, пару понятых из числа соседей

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

http://developer.android.com/guide/faq/framework.html#3
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
20.04.2015, 09:54     Передать массив в другую Activity #8
Цитата Сообщение от Паблито Посмотреть сообщение
через поле - ты просто несешь чашку в соседнюю комнату
Не совсем так. Через поле ты не можешь унести чашку из кухни - нужно пить там, но может быть так, что его уже выпил кто-то другой)
Паблито
резкий
1964 / 1699 / 526
Регистрация: 12.05.2014
Сообщений: 6,054
Завершенные тесты: 1
20.04.2015, 10:03     Передать массив в другую Activity #9
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Не совсем так. Через поле ты не можешь унести чашку из кухни - нужно пить там, но может быть так, что его уже выпил кто-то другой)
да, моя аналогия очень грубая )
главное, я хотел сказать, что через putExtras передавать как-то тяжело...в своем-то приложении между парой активити
за "пределами андроида" передавать данные внутри своей программы через какой-нибудь плоский объект не считается зазорным и неправильным, так ведь? вопрос риторический )
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
20.04.2015, 10:09     Передать массив в другую Activity #10
Ну андроид так устроен, что может грохнуть что угодно, потому лучше все что нужно активити хранить в этой активити.
lihusha
3 / 3 / 0
Регистрация: 21.03.2015
Сообщений: 67
20.04.2015, 10:43     Передать массив в другую Activity #11
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Ну андроид так устроен, что может грохнуть что угодно, потому лучше все что нужно активити хранить в этой активити.
т.е. лучше по возможности не пользоваться статическим массивом?
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
20.04.2015, 11:20     Передать массив в другую Activity #12
Цитата Сообщение от lihusha Посмотреть сообщение
т.е. лучше по возможности не пользоваться статическим массивом?
Вообще да. Реализация простая на первый взгляд, но проблем с этими статическими полями куча. Единственное что в аднроиде можно сделать статичным это константы и синглтоны. Для всего остального есть другой способ реализации. Еще все статичное живет пока живет приложение, т.е. при перезапуске активити такие поля не будут иметь начальное значение - будет последнее. Точно так же при выгрузке приложения из памяти все статичное станет = null (может и не все, но не встречал исключений), и при перезапуске приложения оно упадет с NPE, если обратиться к этому полю.
Паблито
резкий
1964 / 1699 / 526
Регистрация: 12.05.2014
Сообщений: 6,054
Завершенные тесты: 1
20.04.2015, 11:31     Передать массив в другую Activity #13
Вообще нет. Проблем с этими полями нет.

- создаем объект с полем-массивом
- пишем туда ссылку на нужный массив
- вызываем другую активити через интент
- в другой активити читаем массив
- превращаем наш объект в null
- profit

Что тут должно и когда упасть так что бы получить NPE ? Как вообще MVC живет и работает при таких страхах?
Там же (о боже!) для данных вообще отдельный класс рекомендуют делать.
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
20.04.2015, 11:32     Передать массив в другую Activity #14
Цитата Сообщение от Паблито Посмотреть сообщение
что тут должно и когда упасть так что бы получить NPE ?
Тут все отлично, но потом приложение свернули, открыли супер-пупер тяжелую игру, после игры развернули обратно - приложение упало.
Паблито
резкий
1964 / 1699 / 526
Регистрация: 12.05.2014
Сообщений: 6,054
Завершенные тесты: 1
20.04.2015, 11:38     Передать массив в другую Activity #15
Цитата Сообщение от Spelcrawler Посмотреть сообщение
Тут все отлично, но потом приложение свернули, открыли супер-пупер тяжелую игру, после игры развернули обратно - приложение упало.
по идее при сворачивании приложение должно позаботиться о том, что бы сохранить критичные данные
я хочу спросить - не логичнее ли сохранять массив только если вызван onPause/onStop ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2015, 12:37     Передать массив в другую Activity
Еще ссылки по теме:

Android Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity
Ребят, как передать в другую activity переменную типа int? Android
Передать данные из диалога ListView родительскому Activity Android
Android Как передать данные в Activity из другого класса

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

Или воспользуйтесь поиском по форуму:
Spelcrawler
522 / 492 / 110
Регистрация: 12.03.2014
Сообщений: 1,643
Завершенные тесты: 1
20.04.2015, 12:37     Передать массив в другую Activity #16
Цитата Сообщение от Паблито Посмотреть сообщение
не логичнее ли сохранять массив только если вызван onPause/onStop ?
Сохранится то ведь не то поле, а его копия и потом либо придется назначать тому полю значение из копии, либо использовать две переменные для одного массива. Оба варианта тянут за собой кучу проблем.
Yandex
Объявления
20.04.2015, 12:37     Передать массив в другую Activity
Ответ Создать тему
Опции темы

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