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

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

Войти
Регистрация
Восстановить пароль
 
_Night_Scream_
55 / 67 / 7
Регистрация: 08.08.2013
Сообщений: 545
#1

Сохранение данных - Android

19.10.2015, 21:21. Просмотров 239. Ответов 7
Метки нет (Все метки)

Знаю, знаю что тема заезженная вдоль и поперек но всё таки задам вопрос, может поможете.

Проблема в том, что в моем приложении динамическое создание элементов от view (button, label и многое другое).
Эти элементы могут как создаваться, так и удаляться.
У каждого элемента есть свои настройки, как кастомные так и стандартные типа текста, цвет, бэкграунд, ширина, высота и т.д. и т.п.

Сохранять в SharedPreferences как-то не понятно, слишком простую структуру сохраняет ключ - значение, вот если бы были вложения как например в xml layout <TextView ..... /> и всё что между относится к TextView былоб хорошо.

Вот собсно и вопрос как лучше\проще хранить такие вот настройки.

Где-то в чьих то исходниках видел ключи типа Button_11_Text, Button_11_Height ...
А потом парсинг и отлов нижнего подчеркивания\разбор.
Я считаю как то не нормально это...

Если кто то предложит в базе, то может сразу фреймворк посоветует путёвый.

Данных не очень много, да в целом менее 1Мб точно, счет на сотни Кб.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
20.10.2015, 11:00     Сохранение данных #2
_Night_Scream_, сохранять в базу.
Я бы порекомендовал использовать ORMLite для этой цели.
Нужно создать нужные модели, например,

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
public class TextViewParams {
 
    private String text;
    private float height;
    private float width;
 
    public String getText() {
        return text;
    }
 
    public void setText(String text) {
        this.text = text;
    }
 
    public float getHeight() {
        return height;
    }
 
    public void setHeight(float height) {
        this.height = height;
    }
 
    public float getWidth() {
        return width;
    }
 
    public void setWidth(float width) {
        this.width = width;
    }
}
Потом поставить аннотации для ORM-а.
_Night_Scream_
55 / 67 / 7
Регистрация: 08.08.2013
Сообщений: 545
21.10.2015, 19:22  [ТС]     Сохранение данных #3
YuraAAA, спасибо, но наверное пока начну со стандартных классов.

Тут возникло еще несколько вопросов.
1) Есть ли ограничение на кол-во созданных баз одним приложением?
2) Как узнать имена созданных баз, ну предположим пользователь может создавать свои базы со своими таблицами в процессе работы динамически, а так же удалять, и каждой базе назначать любое имя а потом читать из нее, как вывести список уже созданных баз?

Добавлено через 20 часов 21 минуту
как найти уже созданные базы? Есть метод?
YuraAAA
1564 / 1306 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
21.10.2015, 19:34     Сохранение данных #4
На счет ограничения хз, но создавать можно много. Вопрос зачем
_Night_Scream_
55 / 67 / 7
Регистрация: 08.08.2013
Сообщений: 545
21.10.2015, 20:37  [ТС]     Сохранение данных #5
YuraAAA, в приложении можно создавать проекты, на каждый проект по своей базе, проекты можно создавать сколь угодно много и удалять, в каждой базе таблицы с настройками и сохранениями проектов (по 5 таблиц). Вот и задался вопросом, при запуске надо предложить загрузить ранее созданный проект, для этого надо их найти. Умнее к сожалению не придумал.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
22.10.2015, 08:56     Сохранение данных #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вы можете найти все Ваши базы по имени файла.
что-то типа "дефолтный путь файлов моего приложения"/database/ - они здесь.
например у меня тут
/data/data/com.yahoo.bastrakov.testimage1/databases
лежат базы тестового проекта. все это глянуть руками можно через adb shell.

но по-моему дурацкая идея. :-)
может проще создавать новые таблицы в одной базе для каждого нового проекта? если их много - префикс (суффикс) кода проекта может спасет.

много баз есть смысл создавать тогда, когда есть несколько сервисов, и желательно их не пересекать по данным. в этом случае каждый сервис работает со своей базой, а приложение знает их всех.
_Night_Scream_
55 / 67 / 7
Регистрация: 08.08.2013
Сообщений: 545
22.10.2015, 09:38  [ТС]     Сохранение данных #7
bastrakov, понял что затея дурацкая, спасибо развернутый ответ.
Буду делать одну бд.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2015, 11:26     Сохранение данных
Еще ссылки по теме:

Сохранение данных из переменной Android
Сохранение данных в приложении Android
Android Сохранение в Bundle данных
Как организовать сохранение данных при регистрации Android
Сохранение данных при пересоздании активити Android

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

Или воспользуйтесь поиском по форуму:
zoleg
14 / 14 / 1
Регистрация: 10.01.2012
Сообщений: 121
22.10.2015, 11:26     Сохранение данных #8
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class GetAnyStringFromTetSettingDate {
 
    public String value;
 
    public GetAnyStringFromTetSettingDate(){
 
    }
    public String GetValue(String val){
 
        try {
            value = (String) TetATetSettingDate.class.getField(val).get(null);
        } catch (NoSuchFieldException x) {
            x.printStackTrace();
 
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
 
        return value;
    }
}
Юзать так
Java
1
2
        GetAnyStringFromTetSettingDate getStringFromTetSetingDate = new GetAnyStringFromTetSettingDate();
        TetDriverData.current_zone = getStringFromTetSetingDate.GetValue(getStopName);
Само хранилище
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
 */
public class TetATetSettingDate {
    public static final String DS_SETING_VERS_KEY = "DS_SETING_VERS_KEY"; // Key to get from SharedPreferense DS seting version or revision
    public static String DS_SETING_VERS_VALUE;
    public static final String GPS_UPDATE_DISTANCE_КЕУ = "GPS_UPDATE_DISTANCE"; // Key to get from SharedPreferense
    public static String GPS_UPDATE_DISTANCE = "10";
    public static final String GPS_UPDATE_SECONDS_KEY = "GPS_UPDATE_SECONDS";  // Key to get from SharedPreferense
    public static String GPS_UPDATE_SECONDS = "10";
    public static boolean settingOK;
    public static final String pay_by_order_day_key = "pay_by_order_day";  // Key to get from SharedPreferense sammount payment by eath order taxi cab
    public static String pay_by_order_day;
    public static final String pay_by_order_night_key = "pay_by_order_night"; // Key to get from SharedPreferense sammount payment by eath order taxi cab at night
    public static String pay_by_order_night;
    public static final String pay_by_staf_key = "pay_by_staf"; // Key to get from SharedPreferense sammount payment for driver shift
    public static String pay_by_staf;
    public static final String pay_by_hour_key = "pay_by_hour"; // Key to get from SharedPreferense sammount payment by eath hour
    public static String pay_by_hour;
    public static final String zone_stop_1_key = "zone_stop_1"; // Key to get from SharedPreferense
    public static String zone_stop_1;
    public static final String drvstopid_1_key = "drvstopid_1"; // Key to get from SharedPreferense
    public static String drvstopid_1;
    public static final String poligon_zone_1_key = "poligon_zone_1"; // Key to get from SharedPreferense
    public static String poligon_zone_1;
    public static final String zone_stop_2_key = "zone_stop_2"; // Key to get from SharedPreferense
    public static String zone_stop_2;
    public static final String poligon_zone_2_key = "poligon_zone_2"; // Key to get from SharedPreferense
    public static String poligon_zone_2;
    public static final String drvstopid_2_key = "drvstopid_2"; // Key to get from SharedPreferense
    public static String drvstopid_2;
    public static final String zone_stop_3_key = "zone_stop_3"; // Key to get from SharedPreferense
    public static String zone_stop_3;
    public static final String poligon_zone_3_key = "poligon_zone_3"; // Key to get from SharedPreferense
    public static String poligon_zone_3;
    public static final String drvstopid_3_key = "drvstopid_3"; // Key to get from SharedPreferense
    public static String drvstopid_3;
    public static final String zone_stop_4_key = "zone_stop_4"; // Key to get from SharedPreferense
    public static String zone_stop_4;
    public static final String poligon_zone_4_key = "poligon_zone_4"; // Key to get from SharedPreferense
    public static String poligon_zone_4;
    public static String cityout_tariff;
    public static final String MinimalKm_key = "MinimalKm";//
    public static String MinimalKm;
    public static final String initialPayment_key = "initialPayment";
    public static String initialPayment;
    public static final String MinimalMinutes_key = "MinimalMinutes";
    public static String MinimalMinutes;
    public static final String MinimalPrice_key = "MinimalPrice";
    public static String MinimalPrice;
    public static final String PriceKm_key = "PriceKm";
    public static String PriceKm;
    public static final String waitCustomerMinutes_key = "waitCustomerMinutes";
    public static String waitCustomerMinutes;
    public static final String AutoToMinutesSpeed_key = "AutoToMinutesSpee";
    public static String AutoToMinutesSpeed;
    public static final String AutoToKMSpeed_key = "AutoToKMSpeed";
    public static String AutoToKMSpeed;
    public static final String zoneChoiseByDriver_key = "zoneChoiseByDriver";
    public static String zoneChoiseByDriver;
    public static final String zoneOnlyByDriver_key = "zoneOnlyByDriver";
    public static String zoneOnlyByDriver;
    public static final String minGPSaccuracy_key = "minGPSaccuracy";
    public static String minGPSaccuracy;
    public static final String clear_without_GPS__key = "clear_without_GPS";
    public static String clear_without_GPS;
    public static final String deliveryCarPrice_key = "deliveryCarPrice";
    public static String deliveryCarPrice;
    public static final String occupacyPrice_key = "occupacyPrice";
    public static String occupacyPrice;
    public static final String PriceMinute_key = "PriceMinute";
    public static String PriceMinute;
    public static final String dsCity_key = "dsCity";
    public static String dsCity;
 
 
    public void setTetATetSettingDate(String name, String newVar) {
        name = newVar;
    }
 
 
}
В общем идея понятна ?

Добавлено через 10 минут
Не полностью раскрыл как юзать- добавляю:

Java
1
2
3
String stopIdInAndroid = "drvstopid_" + Integer.toString(position + 1);
GetAnyStringFromTetSettingDate getStringFromTetSetingDate = new GetAnyStringFromTetSettingDate();
TetDriverData.current_zone = getStringFromTetSetingDate.GetValue(stopIdInAndroid);
Yandex
Объявления
22.10.2015, 11:26     Сохранение данных
Ответ Создать тему
Опции темы

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