Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
1

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

22.09.2013, 15:46. Просмотров 1455. Ответов 20
Метки нет (Все метки)

Добрый день! Подскажите, как привильно сохрянать список с классами? Как я понимаю надо смотреть в сторону SQLite? Допустим класс книга, который имеет имя, описание и номер. Как я понимаю можно создать базу данных в приложении. Но что если класс содержит в себе еще список классов, который так же содежит еще один список. Не получится ли слишком награможденно и скажется ли это на производительности? Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 15:46
Ответы с готовыми решениями:

Как поместить в preferences arrayList типа: arraylist<Class>
Как поместить в preferences arrayList типа: arraylist&lt;Class&gt; Class содержит...

Сохранение ArrayList в файл и его чтение
Привет! Имеется: List&lt;File&gt; mImg = new ArrayList&lt;&gt;(); File...

Сохранение ArrayList на внешний накопитель и чтение из него
Привет, помогите пожалуйста. У меня есть ArrayList dataList = new ArrayList();...

Как программно обратиться к внутренней памяти устройства
Здравствуйте, подскажите пожалуйста, имеется планшет Samsung Galaxy Tab 4 с ОС...

Сохранение выбранного изображения в памяти приложения
Доброго времени суток. Есть imageView, по нажатию выбираю фото из галереи....

20
Netscape
374 / 361 / 52
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
22.09.2013, 15:57 2
Можно хранить не список объектов класса, а некий id.
Например, класс книга имеет поля id автора, название, описание и номер. А в базе данных есть таблица с авторами и таблица с книгами, и что бы узнать кто автор достаточно взять поле id автора из объекта Книга и сделать запрос в БД.
Тут может помочь готовое решение, например:
https://bitbucket.org/qbusict/cupboard
Там есть примеры, как раз с автором и книгами.
1
haribo
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 09:51 3
1. в поле "список библиотек" у объекта "книга" храните json со всеми данными библиотек.
2. создайте таблицу с колонками "id name description number bibles" и напихайте туда столько записей для одной книги, сколько библиотек у нее может быть.
0
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 12:57  [ТС] 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;
 }
0
haribo
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 13:12 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 структурированный и правильный, но не самый лучший и быстрый.
1
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 13:56  [ТС] 6
Как будет выглядить весь список тем? Надо под каждую тему создавать отдельный файл или все писать в один? Но если список тем перевалит за 1000 тем. Куда сохранять этот файл?
0
haribo
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 14:50 7
Какой файл? О чем вы?
0
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 15:54  [ТС] 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"
   ]
}
Куда тогда его записывать? Видимо, я вас совсем не так понял
0
haribo
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 15:56 9
Вы можете пойти сложным путем записывая json в поле типа text в SQLite БД.
0
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 16:00  [ТС] 10
никак не могу уловить вашу мысль...Что мне делать тогда? Можете написать поэтапно, если не затруднит.
0
haribo
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 16:21 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}.
1
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 16:31  [ТС] 12
Спасибо!
Теперь понятно, вы имеете ввиду использование SQLite.
Еще вопрос, по базам. Если у меня есть уже существующая тема, и я хочу добавить сразу 10 топиков, какой метод мне использовать?
Занать в цикл метод db.insert? или есть другие решения?
Как можно узнать id добавленной записи? допустим если сразу создать топик и тему, то в тему нужно передать id топика
0
haribo
41 / 41 / 0
Регистрация: 26.05.2013
Сообщений: 160
23.09.2013, 16:51 13
1. да в цикле
2.
Java
1
long id = db.insert(...);
метод insert() возвращает id вставленной записи
1
suvorov
5 / 5 / 0
Регистрация: 14.11.2012
Сообщений: 110
23.09.2013, 17:03  [ТС] 14
Удобно!
И последний вопрос.
Объявляю в таблице name unique. Если в таблицу пытаются внести 2 одиноковых имя, произойдет exaption, как я понимаю. Как правильно отловить, была запись в таблицу или нет?

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

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

Java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation
Здравствуйте. При динамической загрузке кода столкнулся с такой ошибкой: ...

При запуске устройства в Genymotion в окне устройства просто черное поле и кнопки рядом с ним
У меня такая проблема с дженимоушн. При запуске какого-либо устройства...

ArrayList
Доброго времени суток! Мне нужно сделать случайную выборку чисел из массива...


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

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

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