- Доступ к данным Xamarin. Android
- Общие сведения о доступе к данным
- Хранение и доступ к файлам с помощью Xamarin.Android
- Внутреннее и внешнее хранилище
- Работа с внутренним хранилищем
- Чтение или запись в файлы во внутреннем хранилище
- Использование Xamarin. Essentials — вспомогательные средства файловой системы
- Скрытие файлов из MediaStore
- Введение
- Когда следует использовать базу данных
- Преимущества использования базы данных
- SQLite ядро СУБД
- Windows и Windows Phone
Доступ к данным Xamarin. Android
Большинству приложений предъявляются некоторые требования для сохранения данных на устройстве локально. Если объем данных не является тривиальным, для управления доступом к базе данных обычно требуется база данных и уровень данных в приложении. В Android имеется встроенное ядро СУБД SQLite, а доступ к хранению и извлечению данных упрощен платформой Xamarin. В этом документе показано, как получить доступ к базе данных SQLite с помощью кросс-платформенного способа.
Общие сведения о доступе к данным
Большинству приложений предъявляются некоторые требования для сохранения данных на устройстве локально. Если объем данных не является тривиальным, для управления доступом к базе данных обычно требуется база данных и уровень данных в приложении. В Android используется встроенное ядро базы данных SQLite, а доступ к данным упрощен платформой Xamarin, которая поставляется с поставщиком данных SQLite.
В Xamarin. Android поддерживаются API-интерфейсы доступа к базам данных, например:
- ADO.NET framework.
- SQLite-NET Library стороннего производителя.
Большая часть кода в этом разделе полностью кросс-платформенная и будет работать на iOS или Android без изменения. Обсуждаются два примера приложений:
DataAccess_Basic — простые операции с данными записывают результаты в элемент управления отображением текста;
DataAccess_Advanced — интегрирует операции с данными в небольшое рабочее приложение, которое перечисляет и редактирует простую структуру данных.
Оба примера решения содержат проекты образцов приложений для iOS и Android.
Для приложений Xamarin. Forms прочтите статью Работа с базами данных , в которой объясняется, как работать с SQLite в библиотеке PCL с Xamarin. Forms.
В подразделах этого раздела обсуждается доступ к данным в Xamarin. Android с помощью SQLite в качестве ядра СУБД. доступ к базе данных можно получить напрямую, используя синтаксис ADO.NET или можно включить SQLite.NET ORM и выполнить операции с данными в C#.
Рассматриваются два примера: один содержит очень простой код доступа к данным, который выводит данные в текстовое поле, и простое приложение, включающее функции создания, чтения, обновления и удаления. Также обсуждается создание потоков и заполнение приложения предварительно заполненной базой данных SQLite.
дополнительные примеры доступа к данным на разных платформах см. в нашем Pro практическом примере.
Источник
Хранение и доступ к файлам с помощью Xamarin.Android
Распространенным требованием для приложений Android является работа с файлами — сохранение изображений, скачивание документов или экспорт данных для совместного использования с другими программами. Android (на основе Linux) поддерживает эти операции, предоставляя пространство для хранения файлов. Android группирует файловую систему в два разных типа хранилища.
- внутренняя служба хранилища — это часть файловой системы, доступ к которой может получить только приложение или операционная система.
- внешние служба хранилища — это раздел для хранения файлов, доступных для всех приложений, пользователя и, возможно, других устройств. На некоторых устройствах внешнее хранилище может быть съемным (например, SD-карта).
Эти группы существуют на понятийном уровне и не обязательно ссылаются на отдельный раздел или каталог на устройстве. Устройство Android всегда будет предоставлять раздел для внутреннего и внешнего хранилища. Некоторые устройства могут иметь несколько разделов, которые считаются внешним хранилищем. Независимо от раздела API для чтения, записи или создания файлов одинаковы. Существует два набора API, которые приложение Xamarin.Android может использовать для доступа к файлам.
- API-интерфейсы .NET (предоставленные Mono и Упакованные Xamarin. Android) — включают вспомогательные функции файловой системы , предоставляемые Xamarin. Essentials. API .NET обеспечивают лучшую совместимость с различными платформами, поэтому в данной статье мы сосредоточимся на этих API.
- Собственные API-интерфейсы доступа к файлам Java (предоставляемые Java и Упакованные Xamarin. Android) — Java предоставляет собственные API для чтения и записи файлов. Это полностью приемлемая альтернатива API .NET, но они относятся только к Android и не подходят для кросс-платформенных приложений.
В Xamarin.Android чтение и запись в файлы практически идентична этим процессам в любых других приложениях .NET. Приложение Xamarin.Android определяет путь к файлу, который будет обработан, а затем использует стандартные идиомы .NET для доступа к файлам. Так как фактические пути к внутреннему и внешнему хранилищу могут отличаться в зависимости от устройства или от версии Android, не рекомендуется жестко задавать путь к файлам. Вместо этого используйте API Xamarin.Android, чтобы определить путь к файлам. Таким образом, API .NET для чтения и записи файлов предоставляют собственные API Android, которые помогут определить путь к файлам во внутреннем и внешнем хранилище.
Прежде чем обсуждать API, участвующие в доступе к файлам, важно понять некоторые сведения о внутреннем и внешнем хранилище. О них мы поговорим в следующем разделе.
Внутреннее и внешнее хранилище
По сути, внутреннее хранилище и внешнее хранилище очень похожи — они являются местами, в которых приложение Xamarin. Android может сохранять файлы. Такое сходство может запутывать разработчиков, не знакомых с Android, так как неясно, когда приложение должно использовать внутреннее хранилище, а когда — внешнее.
Внутреннее хранилище относится к энергонезависимой памяти, которую Android выделяет операционной системе, APK и отдельным приложениям. Это пространство доступно только операционной системе или приложениям. Android выделит каталог в разделе внутреннего хранилища для каждого приложения. При удалении приложения все файлы, хранящиеся во внутреннем хранилище в этом каталоге, также будут удалены. Внутреннее хранилище лучше всего подходит для файлов, доступных только для приложения, которые не будут использоваться совместно с другими приложениями или будут почти бесполезными после удаления приложения. В Android 6.0 или более поздней версии для файлов во внутреннем хранилище может автоматически создаваться резервная копия с помощью Google с использованием функции автоматического резервного копирования в Android 6.0. Внутреннее хранилище имеет следующие недостатки.
- Невозможно предоставить общий доступ к файлам.
- Файлы будут удалены при удалении приложения.
- Пространство, доступное во внутренней памяти, может быть ограничено.
Внешнее хранилище относится к хранилищу файлов, которое не является внутренним хранилищем и доступно не только для приложения. Основное предназначение внешнего хранилища — предоставление места для размещения файлов для совместного использования приложениями или файлов слишком большого размера для внутреннего хранилища. Преимущество внешнего хранилища состоит в том, что оно предоставляет для файлов гораздо больше места, чем внутреннее хранилище. Однако внешнее хранилище не всегда присутствует на устройстве и может потребовать от пользователя специального разрешения для доступа к нему.
Для устройств, поддерживающих несколько пользователей, Android предоставит каждому пользователю собственный каталог как во внутреннем, так и во внешнем хранилище. Этот каталог недоступен для других пользователей на устройстве. Это разделение невидимо для приложений, если они не используют жестко запрограммированные пути к файлам во внутреннем или внешнем хранилище.
Как правило, приложения Xamarin.Android должны сохранять свои файлы во внутреннем хранилище, когда это разумно, и использовать внешнее хранилище, если файлы должны быть доступны другим приложениям, имеют большой размер или должны сохраняться даже при удалении приложения. Например, файл конфигурации лучше всего подходит для внутреннего хранилища, так как он важен только для приложения, которое его создает. Фотографии, напротив, лучше хранить во внешнем хранилище. Они могут быть очень большими, и часто пользователю может потребоваться предоставить или получить доступ к ним, даже если приложение удалено.
В этом руководстве основное внимание уделяется внутреннему хранилищу. Дополнительные сведения об использовании внешнего хранилища в приложении Xamarin.Android см. в разделе Внешнее хранилище.
Работа с внутренним хранилищем
Каталог внутреннего хранилища для приложения определяется операционной системой и предоставляется приложениям Android с помощью свойства Android.Content.Context.FilesDir . Будет возвращен объект Java.IO.File , представляющий каталог, выделенный Android исключительно для приложения. Например, для приложения с именем пакета com.companyname каталогом внутреннего хранилища может быть:
Этот документ будет ссылаться на внутренний каталог хранилища как на INTERNAL_STORAGE.
Точный путь к каталогу внутреннего хранилища может отличаться на разных устройствах и в разных версиях Android. По этой причине приложения не должны жестко кодировать путь к каталогу внутреннего хранилища файлов и вместо этого должны использовать интерфейсы API Xamarin.Android, например System.Environment.GetFolderPath() .
Чтобы максимально увеличить общий доступ к коду, приложения Xamarin.Android (или приложения Xamarin.Forms для Xamarin.Android) должны использовать метод System.Environment.GetFolderPath() . В Xamarin.Android этот метод возвращает строку для каталога, который находится в том же расположении, что и Android.Content.Context.FilesDir . Этот метод принимает перечисление, System.Environment.SpecialFolder , которое используется для определения набора перечислимых констант, представляющих пути специальных папок, используемых операционной системой. Не все значения System.Environment.SpecialFolder будут сопоставляться с допустимым каталогом в Xamarin.Android. В следующей таблице описано, каким может быть путь для заданного значения System.Environment.SpecialFolder :
System.Environment.SpecialFolder | путь |
---|---|
ApplicationData | INTERNAL_STORAGEи .config |
Desktop | INTERNAL_STORAGE/Desktop |
LocalApplicationData | INTERNAL_STORAGE/.local/share |
MyDocuments | INTERNAL_STORAGE |
MyMusic | INTERNAL_STORAGE/Мусик |
MyPictures | INTERNAL_STORAGE/пиктурес |
MyVideos | INTERNAL_STORAGE/видеос |
Personal | INTERNAL_STORAGE |
Fonts | INTERNAL_STORAGE/.Фонтс |
Templates | INTERNAL_STORAGE/темплатес |
CommonApplicationData | /usr/share |
CommonApplicationData | /usr/share |
Чтение или запись в файлы во внутреннем хранилище
Можно использовать любой API C# для записи в файл. Достаточно просто получить путь к файлу, который находится в каталоге, выделенном для приложения. Настоятельно рекомендуется использовать асинхронные версии API .NET, чтобы возникало меньше проблем с блокировкой основного потока в связи с доступом к файлу.
Этот фрагмент кода представляет один из примеров записи целого числа в текстовый файл в кодировке UTF-8 в каталоге внутреннего хранилища приложения:
Следующий фрагмент кода предоставляет один из способов чтения целочисленного значения, хранящегося в текстовом файле:
Использование Xamarin. Essentials — вспомогательные средства файловой системы
Xamarin.Essentials — это набор API для написания кода, совместимого с разными платформами. Вспомогательные функции файловой системы — это класс, который содержит ряд вспомогательных функций для упрощения поиска каталогов кэша и данных приложения. В этом фрагменте кода приведен пример того, как найти каталог внутреннего хранилища и каталог кэша для приложения:
Скрытие файлов из MediaStore
MediaStore — это компонент Android, который собирает метаданные о файлах мультимедиа (видео, музыка, изображения) на устройстве Android. Его цель — упростить совместное использование этих файлов во всех приложениях Android на устройстве.
Закрытые файлы не будут отображаться как общие мультимедиа. Например, если приложение сохраняет изображение в закрытом внешнем хранилище, сканер мультимедиа ( MediaStore ) не получит этот файл.
Общедоступные файлы будут доступны для MediaStore . Каталоги, имеющие нулевое имя файла в байтах . НОСИТЕЛЬ не будет проверяться .
Источник
Введение
Когда следует использовать базу данных
Хотя возможности хранения и обработки мобильных устройств увеличиваются, телефоны и Планшетные ПК по-прежнему будут отставать от настольных и переносных компьютеров. По этой причине стоит потратить некоторое время на планирование архитектуры хранилища данных для приложения, а не только при условии, что база данных является верным ответом на все время. Существует ряд различных параметров, отвечающих различным требованиям, например:
- Предпочтения — Android предлагает встроенный механизм для хранения простых пар «ключ-значение». Если вы храните простые параметры пользователя или небольшие фрагменты данных (например, сведения о персонализации), используйте собственные функции платформы для хранения информации такого типа.
- Текстовые файлы — пользовательский ввод или кэш загруженного содержимого (например, HTML) может храниться непосредственно в файловой системе. Используйте соответствующее соглашение об именовании файлов, чтобы облегчить организацию файлов и поиск данных.
- Сериализованные файлы данных — объекты могут сохраняться в файловой системе как XML или JSON. Платформа .NET Framework включает библиотеки, которые упрощают сериализацию и десериализацию объектов. Используйте подходящие имена для организации файлов данных.
- База данных — обработчик базы данных SQLite доступен на платформе Android и удобен для хранения структурированных данных, необходимых для выполнения запросов, сортировки или других манипуляций. Хранилище базы данных подходит для списков данных с множеством свойств.
- Файлы изображений — хотя двоичные данные можно хранить в базе данных на мобильном устройстве, рекомендуется хранить их непосредственно в файловой системе. При необходимости можно сохранить имена файлов в базе данных, чтобы связать образ с другими данными. При работе с большими изображениями или большим количеством изображений рекомендуется спланировать стратегию кэширования, которая удаляет файлы, которые больше не нужны, чтобы избежать использования всех дисков.
Если база данных является верным механизмом хранения для вашего приложения, в оставшейся части этого документа рассматривается использование SQLite на платформе Xamarin.
Преимущества использования базы данных
использование базы данных SQL в мобильном приложении имеет ряд преимуществ.
- SQL базы данных обеспечивают эффективное хранение структурированных данных.
- Конкретные данные можно извлечь с помощью сложных запросов.
- Результаты запроса могут быть отсортированы.
- Результаты запроса могут быть агрегированы.
- Разработчики с существующими навыками баз данных могут использовать свои знания для проектирования базы данных и кода доступа к данным.
- Модель данных из серверного компонента подключенного приложения можно использовать повторно (полностью или частично) в мобильном приложении.
SQLite ядро СУБД
SQLite — это ядро базы данных с открытым кодом, которое было принято Google для своей мобильной платформы. Ядро базы данных SQLite встроено в обе операционные системы, поэтому для разработчиков нет никакой дополнительной работы для ее использования. SQLite хорошо подходит для кросс-платформенной разработки мобильных приложений, поскольку:
- Ядро СУБД является небольшим, быстрым и простым в переносе.
- База данных хранится в одном файле, что упрощает управление на мобильных устройствах.
- Формат файла прост в использовании на разных платформах: требуется ли 32-или 64-разрядная система, а также системы с большим или прямым порядком байтов.
- Он реализует большую часть SQL92 стандарта.
Так как SQLite разработано как небольшие и быстрые, существует ряд предостережений по его использованию:
- Синтаксис внешнего объединения не поддерживается.
- Поддерживаются только переименование таблиц и ADDCOLUMN. В схему невозможно внести другие изменения.
- Представления доступны только для чтения.
Вы можете узнать больше о SQLite на веб-сайте — SQLite.org , но все сведения, необходимые для использования SQLite с Xamarin, содержатся в этом документе и связанных образцах. Ядро базы данных SQLite поддерживалось в Android с Android 2. хотя в этой главе не рассматривается, SQLite также можно использовать в приложениях Windows Phone и Windows.
Windows и Windows Phone
SQLite также можно использовать на платформах Windows, хотя эти платформы не рассматриваются в этом документе. дополнительные сведения см. в статье, посвященной задачам и задачам Pro , и ознакомьтесь с блогом тим хойер (.
Источник