#c# #android #sqlite #xamarin
#c# #Android #sqlite #xamarin
Вопрос:
В моем приложении Xamarin для Android я создаю путь к базе данных, используя «System.Environment.Специальная папка.Личная». У меня есть существующая база данных sqlite. Куда в проекте и с какими свойствами я должен включить базу данных, которая будет использоваться в папке personal?
Комментарии:
1. Вам нужно будет включить существующую базу данных в свой проект в качестве ресурса, а затем при запуске скопировать ее в личную папку.
2. Спасибо. Как я могу скопировать в личную папку при запуске. Извините, но я новичок в xamarin.
Ответ №1:
Вы можете использовать Xamarin.Essentials
для доступа к вашему доступному только для чтения пакету / ресурсу asset и скопировать его без необходимости использовать собственный код платформы или если вы кодируете в Xamarin.Проект Android, вы можете напрямую использовать ресурсы Android.Content
Итак, предполагая, что у вас есть база данных в папке Android Assets:
Assets
db.sqlite
Пример кода Xamarin Essentials / NetStd2.0:
var copyToLocationPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "db.sqlite");
if (!File.Exists(copyToLocationPath))
{
using (var assetStream = await Xamarin.Essentials.FileSystem.OpenAppPackageFileAsync("db.sqlite"))
using (var fileStream = new FileStream(copyToLocationPath, FileMode.Create, FileAccess.Write))
{
await assetStream.CopyToAsync(fileStream);
}
}
var connection = new SqliteConnection(copyToLocationPath);
Пример кода Xamarin Android (используется напрямую Assets
):
var copyToLocationPath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "db.sqlite");
if (!File.Exists(copyToLocationPath))
{
using (var assetStream = Assets.Open("db.sqlite"))
using (var fileStream = new FileStream(copyToLocationPath, FileMode.Create, FileAccess.Write))
{
await assetStream.CopyToAsync(fileStream);
}
}