Best Practies. Properties файлы в Android

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Best Practies. Properties файлы в Android

Сообщение Lighter » 21 авг 2013, 12:10

Всем привет!

Как в андроиде лучше хранить различные конфигурационные параметры? Так же как и в стандартной Java - файлах properties или есть другие рекомендации по этому поводу?


Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 21 авг 2013, 15:00

Насколько я понимаю, SharedPreferences - пользовательские настройки. А как хранить системные, например, адрес сервера или номер порта?

xr0m
Сообщения: 131
Зарегистрирован: 06 апр 2013, 14:01

Re: Best Practies. Properties файлы в Android

Сообщение xr0m » 21 авг 2013, 15:04

Не верно понимаете. SharedPreferences - хранилище открытое для всех аппликаций, в которых можно сохранять различную информацию, в том числе и состояние настроек. Так же есть приватное хранилище, и зашищенное хранилище. Зависит от секретности хранимых данных.

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 21 авг 2013, 16:35

А пользовательские пароли тоже можно хранить в приватном/защищённом хранилище?
В чём разница между приватным/защищённым хранилищем? Дайте ссылки, если не трудно.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 21 авг 2013, 22:00

приватное хранилище - это такие же преференсы, только видимые только 1 активности. Но рутованный девайс все равно может прочесть эти данные. Поэтоу если в них и хранят, то пароли хэшированные (или как их там называют правильно)

поэтому если хранить пароли (что в принципе рекомендует гугл), то для них есть вот такая штучка http://developer.android.com/reference/ ... nager.html
вот ссылки могут быть интересными
http://nelenkov.blogspot.ru/2012/05/sto ... roids.html
http://stackoverflow.com/questions/7859 ... 02#6393502
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 26 авг 2013, 16:36

А если мне нужно вручную сконфигурировать файлы, например, у меня ещё нет функциональности, которая что-либо сохраняет, а нужно сохранить информация IP адрес и порт. Что в этом случае делать? В случае с properties файлами, они свободно редактировались и подключались к проекту.

И что если доступ к Preferences нужно получить вне Activity?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 26 авг 2013, 18:28

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

На второй вопрос, опять же если на устройстве есть рут, то можно получить доступ к данным файла из эклипса или с помощью менеджера файлов.. если я правильно поняла вопрос.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Best Practies. Properties файлы в Android

Сообщение KamiSempai » 26 авг 2013, 18:53

Lighter писал(а):А если мне нужно вручную сконфигурировать файлы, например, у меня ещё нет функциональности, которая что-либо сохраняет, а нужно сохранить информация IP адрес и порт. Что в этом случае делать?
Это же элементарно! Нужно прописать значения по умолчанию, через константы или xml ресурсы.
Lighter писал(а):И что если доступ к Preferences нужно получить вне Activity?
Если в рамках одного приложения то это не сложно(Тут я объясняю как это делается). Если же доступ нужен другому приложению, то только при помощи контент провайдера.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 27 авг 2013, 09:59

Foenix, в первом вопросе я имел ввиду следующее:
Допустим, у меня есть только что созданное приложение HelloWorld, разумеется, пока что никаких значений в Preferences нет. И нужно получить доступ к параметрам (адресу сервера и порту). Откуда можно взять эти значения? Из констант, как предложил KamiSempai? Как сделать чтобы Preferences были инициализированы только один раз, а не при каждом запуске приложения? А дальше нужно каждый раз убеждаться, что Preferences уже заполнены?
В случае properties файлов, эти данные включались в проект (в JAR файл). Кроме того, properties можно вручную отредактировать, а preferences файлы заполняются только из кода, я правильно понимаю (если конечно не связываться с adb push и т.п.)?

И по второму вопросу: я имел ввиду, что есть, например, какой-то класс, который не наследуется от Activity и т.п. Чтобы получить доступ к SharedPreferences нужен доступ к контексту, верно? Как получить доступ к Preferences из такого класса, например:

Код: Выделить всё

public class NetworkManager {
	private void init() {
		// здесь нужен доступ к SharedPreferences
	}
	// ...
}

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 27 авг 2013, 12:10

Привет! Второй вопрос простой. Нужно просто в конструктор этого класса передать либо контекст активити (по-правильному это называют ссылкой на контекст), либо, если по другому поводу контекст не нужен - передать сами преференсы, а их экземпляр получить в активити.

По первому, тебе выбирать, я могу лишь рассказать как сделала я.
При возвращении значений их преференсов мы указываем так же константное значение, оно используется для тех случаев, если преференсов еще нету. И у меня там забита ссылка на localhost, который я использую для целей отладки и тестирования (т.е. моя локальная база данных), да и за праввильные настройки рабочей базы офиса отвечает другой человек и мне они не интересны.

Когда настраивается программа для пользователя, то как только идет запрос к базе данных, а там неправильное соединение (нет соединения), то на экране открывается панель с настройками, в которую нужно внести правильные данные. Обычно это делает, естественно, программист, который устанавливает программу на планшет и открывает ее в первый раз (т.к. пользователю все равно эти данные ни о чем не говорят), и таким образом появляется преференсы с нужными данными. На второй запуск - все уже идет как по маслу.
Если программа обновляется, то эти все настройки пользователя сохраняются.

Как подойдет из твоего случая - все зависит от целей - для кого программа, где будет работать и так далее. Нам такая схема подошла.

Я еще придумала себе такую штуку - можно заполнить не одну настройку, а две-три, и их можно менять из окна настроек просто перещелкнув радиобаттон, а не перебивая данные. Это удобно, когда пользователь из-за каких-то неполадок может принести планшет в офис, где другое соединение с той же базой данных, или переместившись в другой город (в иногороднем филиале своя база данных).
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 27 авг 2013, 12:13

А дальше нужно каждый раз убеждаться, что Preferences уже заполнены?
нет, там сам методе чтения данных из преференсов, как я писала выше, проверяет - есть ли преференсы с данным значением или нет. Если нету - то читает свою константу. Все логично.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 27 авг 2013, 12:39

Foenix писал(а):Когда настраивается программа для пользователя, то как только идет запрос к базе данных, а там неправильное соединение (нет соединения), то на экране открывается панель с настройками, в которую нужно внести правильные данные. Обычно это делает, естественно, программист, который устанавливает программу на планшет и открывает ее в первый раз (т.к. пользователю все равно эти данные ни о чем не говорят), и таким образом появляется преференсы с нужными данными. На второй запуск - все уже идет как по маслу.
Насколько я понимаю, у тебя специфическое приложение для узкого круга пользователей.
А если приложение для массового пользования? В этом случае конфигурация через константы? Как ещё можно сконфигурировать через XML?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 27 авг 2013, 12:43

ну я ж говорила еще до этого. Либо класть этот файл в assets и при первом запуске оттуда копировать значения в пропертис. Или константами (как у меня Localhost) - но это будет что так что сяк результат одинаковый.

Я думала ты зашифровать хочешь или как-то так, раз там пароли.
Имхо тут ничего выдумывать не нужно, тыщи программ нуждаются в чем-то подобном, все уже реализовано. Возьми любую прогу и посмотри как они делают в UI.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 27 авг 2013, 12:45

А массовое пользование - это в андроидмаркете выложить в этом смысле?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 27 авг 2013, 14:55

Нет, я сейчас имел ввиду не пароли (пароли как ты сказала нужно хранить в AccountManager), а простые конфигурационные данные. Да, под массовым использованием я имел ввиду market.

А где хранить предпочтительнее в assets или res/raw?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 27 авг 2013, 15:09

вообще это две папки с совершенно разным назначением. В res - ресурсы, для них генерируются в R.java айдишники и так далее. А вот сопутствующую вспомогательную самую разную информацию типа баз данных с начальным набором данных, шрифтов, текстовых файлов и прочего - лучше помещать в assets и обращаться к ним по относительному пути через асетменеджер

Кстати, можно не только приложения смотреть готовые, но и допустим если тебе интересно как работает тот же AccountManager, а информации для понимания в виде примеров не хватает, можно поискать исходники приложения на github по какому-то слову, часто там есть примеры небольших, простых программ, классов, библиотек, по использованию чего-либо. Можно глянуть в исходники..
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 27 авг 2013, 16:05

Как говорят об этом в документации http://developer.android.com/tools/proj ... onProjects, отличие только в том, что для res/raw генерируются id, а для assets - нет. Вместе с тем говорится, что assets - хорошее место для хранения текстур и данных игр, а res/rae - для mp3 и Ogg.

За подсказку с github спасибо, хороший совет!

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Best Practies. Properties файлы в Android

Сообщение Foenix » 27 авг 2013, 16:10

совершенно верно
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Lighter
Сообщения: 61
Зарегистрирован: 13 авг 2013, 16:39

Re: Best Practies. Properties файлы в Android

Сообщение Lighter » 27 авг 2013, 16:37

А не посоветуешь пару небольших open source Android проектов, где была бы работа с Preferences, желательно с сетью и т.д.?

Ответить