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

Сохранение arraylist<class> в памяти устройства - Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
22.09.2013, 15:46     Сохранение arraylist<class> в памяти устройства #1
Добрый день! Подскажите, как привильно сохрянать список с классами? Как я понимаю надо смотреть в сторону SQLite? Допустим класс книга, который имеет имя, описание и номер. Как я понимаю можно создать базу данных в приложении. Но что если класс содержит в себе еще список классов, который так же содежит еще один список. Не получится ли слишком награможденно и скажется ли это на производительности? Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 15:46     Сохранение arraylist<class> в памяти устройства
Посмотрите здесь:

ArrayList Android
Android Как поместить в preferences arrayList типа: arraylist<Class>
ArrayList Android
Android Работа с ArrayList
Android Фильтрация ArrayList
Как программно обратиться к внутренней памяти устройства Android
Сортировка в ArrayList Android
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
22.09.2013, 15:57     Сохранение arraylist<class> в памяти устройства #2
Можно хранить не список объектов класса, а некий id.
Например, класс книга имеет поля id автора, название, описание и номер. А в базе данных есть таблица с авторами и таблица с книгами, и что бы узнать кто автор достаточно взять поле id автора из объекта Книга и сделать запрос в БД.
Тут может помочь готовое решение, например:
https://bitbucket.org/qbusict/cupboard
Там есть примеры, как раз с автором и книгами.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 09:51     Сохранение arraylist<class> в памяти устройства #3
1. в поле "список библиотек" у объекта "книга" храните json со всеми данными библиотек.
2. создайте таблицу с колонками "id name description number bibles" и напихайте туда столько записей для одной книги, сколько библиотек у нее может быть.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 12:57  [ТС]     Сохранение arraylist<class> в памяти устройства #4
haribo
Не могли бы вы привести пример, по сохранению arrayList<Топик>?
И почему json? с ним будет работать быстрее?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Топик {
 String name;
 String link;
 ArrayList<Тема> themeList;
 }
public class Тема {
 String name;
 String link;
 ArrayList<Ответ> reactionList;
 }
public class Ответ {
 String discretion;
 String userName;
 }
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 13:12     Сохранение arraylist<class> в памяти устройства #5
Таблицы:

Answer:
id discription username
1 описание1 user1
2 описание2 user2
3 описание3 user3
4 описание4 user4

Theme:
id name link reaction
1 имятемы1 линк1 1
1 имятемы1 линк1 2
1 имятемы1 линк1 3
1 имятемы1 линк1 4

Получается у Темы1 - список реакций (1,2,3,4)

Это как вариант, SQL структурированный и правильный, но не самый лучший и быстрый.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 13:56  [ТС]     Сохранение arraylist<class> в памяти устройства #6
Как будет выглядить весь список тем? Надо под каждую тему создавать отдельный файл или все писать в один? Но если список тем перевалит за 1000 тем. Куда сохранять этот файл?
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 14:50     Сохранение arraylist<class> в памяти устройства #7
Какой файл? О чем вы?
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 15:54  [ТС]     Сохранение arraylist<class> в памяти устройства #8
С json дела я не имел особо, но пару раз попадался мне на глаза.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
   "firstName": "Иван",
   "lastName": "Иванов",
   "address": {
       "streetAddress": "Московское ш., 101, кв.101",
       "city": "Ленинград",
       "postalCode": 101101
   },
   "phoneNumbers": [
       "812 123-1234",
       "916 123-4567"
   ]
}
Куда тогда его записывать? Видимо, я вас совсем не так понял
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 15:56     Сохранение arraylist<class> в памяти устройства #9
Вы можете пойти сложным путем записывая json в поле типа text в SQLite БД.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 16:00  [ТС]     Сохранение arraylist<class> в памяти устройства #10
никак не могу уловить вашу мысль...Что мне делать тогда? Можете написать поэтапно, если не затруднит.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 16:21     Сохранение arraylist<class> в памяти устройства #11
Уговорили, даю пример :-)
Не надо json.

У одного топика может быть много тем.
В java это так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
class Topic {
    private Integer id;
    private String name;
    private List<Theme> themes;
 
    //getters and setters
}
class Theme {
    private Integer id;
    private String name;
 
    //getters and setters
}
А в SQL это так:
1. Создаете в БД SQLite две таблицы, Theme и Topic.
SQL
1
2
3
4
5
Topic:
id    name
 
Theme 
id     name    topicid
2. Таблица Topic: id - уникальный, автогенерируемый идентификатор топика, name - имя топика.
3. Таблица Theme : id - уникальный, автогенерируемый идентификатор темы, name - имя темы, topicid - ссылка на id в таблицу Topic.

Таким образом таблицы будут иметь следующий вид:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
Topic:
id    name
1     имя1
2     имя2
3     имя3
Theme 
id     name        topicid
1      имятемы1  1
2      имятемы2  1
3      имятемы3  1
4      имятемы4  2
5      имятемы5  2
То есть, у топика с id = 1 есть три темы с id = {1,2,3) а у топика с id = 2 есть две темы с id = {4,5}.
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 16:31  [ТС]     Сохранение arraylist<class> в памяти устройства #12
Спасибо!
Теперь понятно, вы имеете ввиду использование SQLite.
Еще вопрос, по базам. Если у меня есть уже существующая тема, и я хочу добавить сразу 10 топиков, какой метод мне использовать?
Занать в цикл метод db.insert? или есть другие решения?
Как можно узнать id добавленной записи? допустим если сразу создать топик и тему, то в тему нужно передать id топика
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 16:51     Сохранение arraylist<class> в памяти устройства #13
1. да в цикле
2.
Java
1
long id = db.insert(...);
метод insert() возвращает id вставленной записи
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 17:03  [ТС]     Сохранение arraylist<class> в памяти устройства #14
Удобно!
И последний вопрос.
Объявляю в таблице name unique. Если в таблицу пытаются внести 2 одиноковых имя, произойдет exaption, как я понимаю. Как правильно отловить, была запись в таблицу или нет?

Пока знаю только такой способ, но не уверен, правильный ли он:

try
{
db.insert(...);
return true;
}
catch
{
return false;
}
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 18:36     Сохранение arraylist<class> в памяти устройства #15
правильный
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
23.09.2013, 19:34     Сохранение arraylist<class> в памяти устройства #16
Цитата Сообщение от suvorov Посмотреть сообщение
Пока знаю только такой способ, но не уверен, правильный ли он:
Конечно не правильный. Нужно использовать insertOrThrow
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 20:52     Сохранение arraylist<class> в памяти устройства #17
Цитата Сообщение от Netscape Посмотреть сообщение
Конечно не правильный. Нужно использовать insertOrThrow
Объясните пожалуйста почему именно нужно?
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
23.09.2013, 21:14     Сохранение arraylist<class> в памяти устройства #18
Цитата Сообщение от haribo Посмотреть сообщение
Объясните пожалуйста почему именно нужно?
Потому что insert не выбросит Exception, он вернет -1.
haribo
41 / 41 / 3
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 23:02     Сохранение arraylist<class> в памяти устройства #19
Цитата Сообщение от Netscape Посмотреть сообщение
Потому что insert не выбросит Exception, он вернет -1.
И почему лучше insertOrThrow?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 23:14     Сохранение arraylist<class> в памяти устройства
Еще ссылки по теме:

Android ArrayList contains object
Android Работа с ArrayList
Android arrayList Android
Android Java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
Android Сохранение ArrayList в файл и его чтение

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

Или воспользуйтесь поиском по форуму:
Netscape
 Аватар для Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
23.09.2013, 23:14     Сохранение arraylist<class> в памяти устройства #20
Цитата Сообщение от haribo Посмотреть сообщение
И почему лучше insertOrThrow?
Здесь нет лучше или хуже, здесь решение либо подходит, либо нет.
Yandex
Объявления
23.09.2013, 23:14     Сохранение arraylist<class> в памяти устройства
Ответ Создать тему
Опции темы

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