Я новичок в мобильном программировании, я пытаюсь создать приложение базы данных в Xamarin Forms, есть Entity Framework SQLite для легкой работы с базой данных. После прочтения статей я настроил свое приложение так:
public partial class App : Application
{
public const string DbFileName = "DailyAppDatabase.db";
string dbPath = DependencyService.Get<IPath>().GetDatabasePath(DbFileName);
public App()...
}
В проекте Android я реализовал метод, который возвращает путь к базе данных:
return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), filename);
, этот метод возвращает "/data/user/0/com.companyname.daily_app/files/DailyAppDatabase.db"
Я думаю, что мне следует поискать файл базы данных здесь (я хочу получить этот файл и открыть егов браузере баз данных SQLite). Но я не могу использовать эмуляторы, моя система виртуализации не работает, я отлаживаю свое приложение на физическом некорневом устройстве Android 7.0. Как я могу это сделать? Я посмотрел много похожих тем:
Как получить доступ к папке данных / данных на устройстве Android?
Получить базу данных или любой другой файл из внутреннего хранилища, используя run-as
, но не нашел ответа , мне действительно нужна помощь, я попробовал следующий метод:
1) с помощью команды оболочки adb chmod 666 /data/user/0/com.companyname.daily_app/files/DailyAppDatabase.db
2) adb shell -> run-as com.your.packagename -> cp /data/data/com.your.packagename/
Но результат выполнения этих команд на моем устройстве запрещен, я попробовал этот метод:
string _databasePath = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "DailyAppDatabse.db");
if (!File.Exists(_databasePath))
return;
Stream myInput = new FileStream(_databasePath, FileMode.Open);
Stream myOutput = Assets.Open("database.db");
byte[] buffer = new byte[1024];
int b = buffer.Length;
int length;
while ((length = myInput.Read(buffer, 0, b)) > 0)
{
myOutput.Write(buffer, 0, length);
}
myOutput.Flush();
myOutput.Close();
myInput.Close();
Но я думаю, это неправильный способ решения проблемы, получить исключение "метод myOutput. запись (...) не поддерживается. Возможно, кто-то сталкивался с этой проблемой и может помочь, я не хочу получать root-доступ, и мне нравится подход с первым кодом в EntityFramework Core для SQLite