Этот быстрый совет для Android познакомит вас с различными вариантами хранения данных, доступными на платформе Android. Также будет дан краткий практический обзор с рекомендациями для каждого варианта хранения.
Когда вы разрабатываете приложения для Android, у вас есть несколько вариантов с точки зрения того, как вы храните и управляете своими данными. В зависимости от приложения вы можете использовать более одного из них для различных задач обработки данных.
Внутреннее хранилище
Вы можете хранить элементы данных во внутреннем хранилище на устройствах ваших пользователей. Преимущество этого состоит в том, что он не зависит от каких-либо внешних носителей, но недостатком является то, что некоторые устройства имеют чрезвычайно ограниченный объем доступного пространства для хранения. Хранение во внутренней памяти по существу означает сохранение файлов данных во внутренней структуре каталогов устройства.
Следующий код Java демонстрирует открытие файла для вывода данных:
1
2
|
//get a FileOutputStream object by passing the file-name
FileOutputStream dataFileOutput = openFileOutput(«datafile», Context.MODE_PRIVATE);
|
Когда вы сохраняете файлы во внутреннем хранилище, другие приложения не могут получить к ним доступ, и, по умолчанию, пользователь не может получить к ним доступ, поэтому он обеспечивает хорошую надежность. Метод записи FileOutputStream принимает байтовые параметры, поэтому вы можете использовать эту технику только для хранения элементов данных, которые ваша программа может преобразовать в байты.
SD-карты
Многие пользователи Android зависят от внешних носителей, таких как SD-карты, из-за недостатка внутренней памяти. SD-карты предлагают вашим приложениям увеличенный объем памяти, но налагают дополнительные соображения. Например, вы не можете предполагать, что у пользователя будет SD-карта или другой внешний медиа-ресурс. По этой причине ваш программный код должен выполнять проверки перед сохранением данных таким способом. Вам также необходимо учесть возможность изменения пользователем своей SD-карты.
Используя класс Environment , ваши приложения могут проверить доступность записываемого внешнего хранилища следующим образом:
1
2
3
|
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
//can use the external storage
}
|
Также стоит помнить, что файлы, сохраненные на SD-карте, могут быть доступны для других приложений и непосредственно для пользователя, поэтому данные более уязвимы для повреждения.
Базы данных
Если ваше приложение использует более сложные элементы данных, вы можете создать базу данных SQLite для их хранения с использованием реляционной модели. Когда вы создаете базу данных SQLite для своего приложения, вы можете получить к ней доступ из любой точки вашего Java-кода, и она не будет доступна откуда-либо еще. Использование базы данных имеет много преимуществ, таких как возможность хранить и выполнять структурированные запросы.
Чтобы создать пользовательскую базу данных SQLite из своего кода Java, вы можете расширить класс SQLiteOpenHelper , а затем определить и создать таблицы внутри метода «onCreate» следующим образом:
1
2
3
|
public void onCreate(SQLiteDatabase db) {
db.execSQL(«CREATE TABLE Item (ItemID INTEGER, ItemName TEXT);»);
}
|
Этот оператор создает таблицу базы данных с двумя столбцами. Класс SQLiteDatabase предоставляет средства для управления данными, включая методы запроса, вставки и обновления. Одним потенциальным недостатком использования базы данных SQLite в ваших приложениях для Android является объем необходимого кода обработки и необходимый набор навыков. Если вы уже знакомы с SQL, у вас не должно возникнуть проблем.
Общие настройки
Если вам нужно хранить простые элементы данных для ваших приложений, самый простой подход заключается в использовании общих настроек. Возможно, это самый простой вариант для управления данными, но он подходит только для элементов примитивного типа, таких как числа и текст. Используя Shared Preferences, вы моделируете свои элементы данных как пары ключ-значение. Следующий код демонстрирует получение ссылки на объект SharedPreferences для приложения и запись значения в него:
1
2
3
4
5
|
//get the preferences, then editor, set a data item
SharedPreferences appPrefs = getSharedPreferences(«MyAppPrefs», 0);
SharedPreferences.Editor prefsEd = appPrefs.edit();
prefsEd.putString(«dataString», «some string data»);
prefsEd.commit();
|
Все, что вы сохраните в общих настройках, будет по-прежнему доступно при следующем запуске приложения, поэтому оно идеально подходит для сохранения таких элементов, как пользовательские настройки и настройки. Когда ваше приложение запускается, вы можете проверить общие настройки, а затем представить свой интерфейс и функциональные возможности соответственно. Следующий код демонстрирует получение элемента данных строки:
1
2
3
|
//get the preferences then retrieve saved data, specifying a default value
SharedPreferences appPrefs = getSharedPreferences(«MyAppPrefs», 0);
String savedData = appPrefs.getString(«dataString», «»);
|
Веб-хранилище
Поскольку устройства Android обеспечивают подключение к Интернету, ваши приложения, конечно, могут использовать данные, хранящиеся в Интернете. Естественно, вам необходимо учитывать, как ваши приложения будут справляться с ограниченным или отсутствующим подключением. Как и в веб-приложении, этот параметр позволяет хранить данные практически на любой платформе или модели, которые вы предпочитаете. Язык Java также использует ряд стандартных библиотек для обработки данных, извлекаемых по сети, из таких источников, как базы данных SQL и документы XML. Пакеты java.net и android.net предоставляют классы для управления сетевыми данными.
Вывод
Если вы разрабатываете в Eclipse, вы можете вручную управлять аспектами хранения данных на виртуальных устройствах в перспективе DDMS.
Неизбежно, вам нужно адаптировать свой подход к управлению данными к вашим собственным проектам разработки под Android. Платформа является гибкой, поэтому есть большой выбор. Когда вы реализуете управление данными в своих приложениях, обязательно проверяйте их как на реальных устройствах, так и в эмуляторе, так как существует большая вероятность ошибок, когда пользователи получают доступ к вашим функциям в своем собственном уникальном контексте.
об авторе
Я веб-разработчик / разработчик программного обеспечения и технический / комедийный писатель — подробности смотрите в BeNormal.info . Приложения Nonsense — моя первая попытка разработки под Android. Я написал для многих разных клиентов, включая Smashing Magazine . Мои собственные сайты включают в себя журнал об обмане BrainDeadAir . Следуйте за мной в Твиттере @BrainDeadAir или пишите мне на [email protected] .