Использовать локальную базу данных в Xamarin

Я начал использовать плагин Xamarin для Visual Studio для создания приложения для Android.

У меня есть локальная firebase database SQL, и я хочу вызвать ее для отображения данных. Я не понимаю, как я могу это сделать. Является ли это возможным?

Подумав, что это было тривиально, я был ошибочен, когда попытался настроить быстрый тестовый проект. Это сообщение будет содержать полное руководство по настройке базы данных для приложения Android в Xamarin, которое будет полезно в качестве ссылки для будущих пользователей Xamarin.

С одного взгляда:

  1. Добавьте Sqlite.cs в свой проект.
  2. Добавьте файл базы данных в качестве актива.
  3. Установите файл базы данных для создания в виде AndroidAsset.
  4. Вручную скопируйте файл базы данных из вашего apk в другой каталог.
  5. Откройте соединение с базой данных, используя Sqlite.SqliteConnection.
  6. Работайте в базе данных с помощью Sqlite.

Настройка локальной базы данных для проекта Xamarin Android

1. Добавьте Sqlite.cs в свой проект.

Начните с просмотра этого репозитория и загрузки Sqlite.cs; это обеспечивает Sqlite API, который вы можете использовать для запуска запросов к вашему db. Добавьте файл в проект в качестве исходного файла.

2. Добавьте БД в качестве актива.

Затем получите свою БД и скопируйте ее в каталог «Активы» вашего проекта Android, а затем импортируйте его в свой проект, чтобы он отображался под папкой « Активы » в вашем решении:

введите описание изображения здесь

Я использую образец базы данных Chinook_Sqlite.sqlite, переименованный в db.sqlite с этого сайта в этом примере.

3. Установите БД для сборки как AndroidAsset.

Щелкните правой кнопкой мыши файл DB и настройте его для создания действия AndroidAsset . Это обеспечит его включение в каталог активов APK.

введите описание изображения здесь

4. Вручную скопируйте DB из своего APK.

Поскольку БД включается в качестве актива (упакованного в APK), вам нужно будет его извлечь.

Вы можете сделать это со следующим кодом:

 string dbName = "db.sqlite"; string dbPath = Path.Combine (Android.OS.Environment.ExternalStorageDirectory.ToString (), dbName); // Check if your DB has already been extracted. if (!File.Exists(dbPath)) { using (BinaryReader br = new BinaryReader(Android.App.Application.Context.Assets.Open(dbName))) { using (BinaryWriter bw = new BinaryWriter(new FileStream(dbPath, FileMode.Create))) { byte[] buffer = new byte[2048]; int len = 0; while ((len = br.Read(buffer, 0, buffer.Length)) > 0) { bw.Write (buffer, 0, len); } } } } 

Это извлекает БД как двоичный файл из APK и помещает его в внешний путь хранения системы. Реально БД может идти куда угодно, я только решил придерживаться его здесь.

Я также читал, что Android имеет папку с базами данных, в которой будут храниться базы данных напрямую; Я не мог заставить его работать, поэтому я только что использовал этот метод использования существующей БД.

5. Откройте соединение с БД.

Теперь откройте соединение с БД через class Sqlite.SqliteConnection:

 using (var conn = new SQLite.SQLiteConnection(dbPath)) { // Do stuff here... } 

6. Работайте с БД.

Наконец, поскольку Sqlite.net является ORM, вы можете работать с базой данных, используя свои собственные типы данных:

 public class Album { [PrimaryKey, AutoIncrement] public int AlbumId { get; set; } public string Title { get; set; } public int ArtistId { get; set; } } // Other code... using (var conn = new SQLite.SQLiteConnection(dbPath)) { var cmd = new SQLite.SQLiteCommand (conn); cmd.CommandText = "select * from Album"; var r = cmd.ExecuteQuery (); Console.Write (r); } 

Резюме

И вот как добавить существующую базу данных Sqlite в решение Xamarin для Android! Для получения дополнительной информации ознакомьтесь с примерами, включенными в библиотеку Sqlite.net, его модульными тестами и примерами в документации Xamarin.

  • MvvmCross Android - альтернатива привязке RelativeSource для команды button
  • Добавить высоту / тень на панели инструментов для устройств с предварительным леоптипом
  • Когда использовать Xamarin.Forms vs Xamarin Native?
  • Давайте будем гением компьютера.