Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 84
1

Как сохранить arrayList и другие объекты после выхода из activity?

17.02.2018, 22:18. Просмотров 379. Ответов 9
Метки нет (Все метки)

Всех приветствую. Подскажите пожалуйста,как реализовать чтобы при выходе из activity кнопкой назад ArrayList не очищался. Просто ещё у меня есть receiver,который при получении определённого intent работает с данным araylist,но при закрытии activity arraylist очищается,а значит я получаю exception. Я хотел использовать метод moveTaskToBack(true),но это работает частично,т.е когда я выхожу кнопкой назад из activity,это работает,а вот когда я запускаю activity методом startActivityForResult(intent,0),а потом возвращаюсь кнопкой назад на текущую activity,listView очищается (ArrayList пока не проверял). Была ещё идея создать сервис,но я не уверен,что при выходе из activity arraylist не уничтожится. На всякий случай сообщаю,что ArrayList хранится в отдельном класе,экземпляр которого есть в MainActivity. Подскажите пожалуйста,как реализовать сохранение всех данных,которые в будущем будут браться из настроек,а пока что просто заносятся в соответствующие переменные до перезагрузки или выключения устройства? Заранее благодарю всех за помощь.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2018, 22:18
Ответы с готовыми решениями:

Как сохранить ArrayList
Знаю,вопрос наверное глупый,но как? У меня приложение "Телефонная книга". Если...

Как сохранить настройки в одном Activity и получить в другом?
Ипользовал эту статью...

Android. Как сохранить ArrayList<String> в файл
Ребята, помогите пожалуйста. Есть список: ArrayList&lt;String&gt; myList; Пишу...

Как сохранить текст с EditText при переходе на другую Activity?
проблема такая что не могу реализовать EditText сохраняет данные в буфер или...

ArrayList<Map<String,Object>> как сохранить активность?
ArrayList&lt;Map&lt;String,Object&gt;&gt; как сохранить savedInstanceState

9
ExFau$t
634 / 534 / 122
Регистрация: 08.05.2012
Сообщений: 2,690
17.02.2018, 23:02 2
http://developer.alexanderklimov.ru/...references.php
0
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 84
18.02.2018, 00:49  [ТС] 3
Я понял Вашу идею. Вы имеете ввиду сохранять всё в памяти устройства,а при загрузке устройства доставать соответствующие значения из настроек. Конечно,в дальнейшем это так и будет сделано,но пока что задача хранить все данные в оперативной памяти смарта,а с этим как раз-то и проблема,поскольку при закрытии activity мой arrayList очищается. К тому же я всё равно буду загружать настройки в ArrayList и тут опять может возникнуть проблема,когда пользователь захочет что-то изменить в настройках,т.к когда он что-то изменит и обновится ArrayList,то после закрытия activity он очистится,а мне этого не нужно. Пока что мне нужно,чтобы все переменные во время фоновой работы приложения не уничтожались до перезагрузки или до выключения устройства.
0
ExFau$t
634 / 534 / 122
Регистрация: 08.05.2012
Сообщений: 2,690
18.02.2018, 01:05 4
Не улавливаю логику. Ну и держи эти переменные в своей "фоновой работе".
0
Araikovich
10 / 9 / 1
Регистрация: 09.08.2017
Сообщений: 62
18.02.2018, 01:54 5
Если ArrayList - то сохранять в SharedPrefereces - очень дурной тон. Сохрани данные в SQLite. И ты в любой момент будешь иметь к ним доступ. Если данные надо отчистить, просто отчисти таблицу - это одна строчка. Обновить - чистишь таблицу - записываешь заново. Вся работа с бд в отдельном потоке, и выполняется очень быстро, систему этим не загрузишь)

Добавлено через 31 минуту
Ах, ну да, есть еще вариант сделать этот ArrayList - static. Но с этим надо быть очень аккуратным, так можно засорить память.
0
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 84
18.02.2018, 02:34  [ТС] 6
Так в том то и дело,что когда я выхожу из activity arrayList очищается,т.е его размер равен 0,а мне этого не нужно,поскольку с ним ещё работает receiver,когда получает intent. В результате когда очередной будильник срабатывает и я получаю его id,который позволяет мне узнать,какой будильник из списка сработал в данный момент,моя программа крахается,а в логах пишется,что,к примеру,индекс 1,а размер 0 и это не мой баг,поскольку при открытой activity всё прекрасно работает,а вот при закрытии список очищается,хоть он и final и static.

Добавлено через 22 минуты
Насчёт базы данных я конечно думал,но во-первых я читал,что настройки более оптимальны по объёму оперативы и другим системным ресурсам,а во-вторых,чтобы база данных работала быстро и правильно,её,как я понимаю,нужно правильно организовать,т.е установить соответствующие связи,привести к нормальной форме,провести индексирование,в общем это будет гораздо сложнее,чем с настройками. А через настройки это гораздо проще: Я просто преобразовываю каждый объект arrayList в строку json с помощью специальной библиотеки (не помню название),и ложу преобразованные строки в set,который передаётся соответствующему методу настроек. Также я могу распаковать эти строки в ArrayList с соответствующими объектами,используя ту же библиотеку. Или я не прав,если да,то почему? Единственное приемущество базы данных это то,что я смогу гораздо проще выбирать будильники по интересующим меня параметрам,используя sql запросы,а так гораздо проще работать с настройками,чем с базой данных.
0
Araikovich
10 / 9 / 1
Регистрация: 09.08.2017
Сообщений: 62
18.02.2018, 03:07 7
Я согласен - проще. Однажды я так и подумал, когда проходил собеседование в одной фирме. Меня не взяли, именно потому, что я сохранил ArrayList в настройки вместо БД. А насчет сложности работы с бд - не понимаю. Создал таблицу с полями как в Объекте ArrayList'а, индексация - уже есть в ArrayList, если надо сохранять id - легко. Причем есть прикольная библиотека - Room. Вообщем, вариантов масса. Пробуй, тестируй, без этого никак)
0
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 84
18.02.2018, 13:21  [ТС] 8
Ну может более наглядно хранить список в БД,я не спорю,но я пишу это приложение для человека,который не понимает в программировании. Для него важно,чтобы всё работало. К тому же,как я ранее писал,настройки более оптимальны с точки зрения системных ресурсов. Также в моём объекте есть массив объектов другого класса из семи элементов,чтобы пользователь мог выбирать не только дни недели срабатывания будильника,но и треки,которые будут проигрываться в этот день. А можно ли в бд в качестве поля использовать массив? Я знаю,что это ненормально и эту базу нужно будет привести к третьей нормальной форме,что усложняет мне работу и даёт ещё один аргумент против базы данных,но всё же мне интересно,реально ли в качестве поля бд иметь массив. Также хотелось бы уточнить,перестраиваются ли id при удалении записи из бд,или его нужно перестроить самому и если да,то как это делать? Под перестройкой id я имею ввиду,к примеру,следующее. У нас есть будильники с id 0,1,2 и я удаляю будильник с id 1. Будут ли после удаления одного будильника id остальных 2-х 0,1,или они так и будут 0,2? Другими словами,если перевести на arrayList,id будильника это его номер в списке. Также непонятно,как удалять базу данных из устройства. К примеру я где-то накосячил в бд и в новой версии приложения хочу перезаписать её. Но как я читал,при перезаписи бд можно получить exception,поскольку она уже существует. Допустим я её удалю и перезапишу,но мне нужно как-то проверять,новая ли бд у пользователя,или старая,чтобы не перезаписывать её при каждом запуске приложения. С настройками всё это сделать гораздо проще.

Добавлено через 10 минут
Пока что вопрос стоит как сделать,чтобы не очищался ArrayList и ListView при переходе на другую activity,используя метод startActivityForResult или при выходе из текущей activity,а про долговечное хранение можно будет подумать потом,хотя пока что мне больше нравится вариант с настройками,не смотря на то,что некоторые операции,которые я совершаю над списком,можно с лёгкостью совершать,используя sql запросы к бд.
0
ExFau$t
634 / 534 / 122
Регистрация: 08.05.2012
Сообщений: 2,690
18.02.2018, 14:40 9
Цитата Сообщение от Araikovich Посмотреть сообщение
Если ArrayList - то сохранять в SharedPrefereces - очень дурной тон.
С каких пор сохранять инфу в файл стало дурным тоном. А сохранять в файл с оболочкой не дурной тон.
Цитата Сообщение от КАВ Посмотреть сообщение
с ним ещё работает receiver
Ресивер и активити никак не связаны. Закрытие активити никак не должно влиять на ресивер, если данные какие-то нужны в сервисе, то там они и должны получаться, а не вытаскиваться из активити.
0
КАВ
13 / 1 / 0
Регистрация: 16.04.2016
Сообщений: 84
19.02.2018, 16:55  [ТС] 10
Т.е даже если приложение крахается,то receiver работает сам по себе,или он просто работает как отдельный процесс,как бы второе приложение до тех пор,пока программа не крахнется? Не могли бы Вы пожалуйста привести пример кода как сохранить ArrayList,в который вводятся данные из activity даже при выходе из activity,чтобы моё приложение могло нормально работать в фоне (ArrayList статический,final,и находится в самом классе receiver). И ещё хотелось бы уточнить,как сделать,чтобы не очищался ListView когда я запускаю другую activity,используя метод startActivityForResult и потом возвращаюсь в исходную activity?
0
19.02.2018, 16:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2018, 16:55

Как из одного Activity перенести фотку в другое Activity?
Собственно необходимо отобразить фотографию в activity2, которую загрузили в...

Как в Navigation Drawer Activity засунуть Activity?
Здравствуйте! у меня такая проблема navigation drawer activity работает только...

Как добавить cardview в activity с другой activity?
У меня есть активность(1), куда нужно добавить cardview. в этой же активности...


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

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

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