Xamarin Android Sqlite数据库浏览器

Xamarin Android Sqlite数据库浏览器,android,sqlite,xamarin,xamarin.android,Android,Sqlite,Xamarin,Xamarin.android,我有了一周以来的第一部智能手机,并尝试用Xamarin制作一个应用程序 我使用带有EntityFrameworkCore的SQLite来存储数据 这是很好的工作,但为了调试更容易,我想使用SQLite浏览器。 数据库文件路径为'data/data/{AppName}/database.db' 我通过USB从物理设备进行调试,但是当我使用Windows资源管理器浏览设备时,我找不到SQLite DB文件。“数据/数据”文件夹不可用。然后我不能使用SQLite浏览器查看数据 在本文中,作者使用And

我有了一周以来的第一部智能手机,并尝试用Xamarin制作一个应用程序

我使用带有EntityFrameworkCore的SQLite来存储数据

这是很好的工作,但为了调试更容易,我想使用SQLite浏览器。 数据库文件路径为'data/data/{AppName}/database.db'

我通过USB从物理设备进行调试,但是当我使用Windows资源管理器浏览设备时,我找不到SQLite DB文件。“数据/数据”文件夹不可用。然后我不能使用SQLite浏览器查看数据

在本文中,作者使用Android仿真器,可以看到“data/data”文件夹:

但我更喜欢使用真正的设备

你有解决办法吗

MikeT开发中的解决方案将db文件存储在可用文件夹中,如下所示:

    public static string DatabasePath
    {
        get
        {
            var dbFolder = Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath;
            var fileName = "database.db";
            var dbFullPath = Path.Combine(dbFolder, fileName);
            return dbFullPath;
        }
    }

在生产中,将db文件复制到一个可用的文件夹。

一个真正的设备,我相信,您需要根设备来直接访问数据

但是,您可以将数据库文件复制到其他位置,例如外部存储。以下是我使用的核心流程:-

            try {
                    FileInputStream fis = new FileInputStream(dbfile);
                    OutputStream backup = new FileOutputStream(backupfilename);

                    //byte[] buffer = new byte[32768];
                    int length;
                    while((length = fis.read(buffer)) > 0) {
                        backup.write(buffer, 0, length);
                    }
                    backup.flush();
                    backup.close();
                    fis.close();
                catch (IOException e) {
                    e.printStackTrace();
                    confirmaction = false;
                }
我使用以下命令获取备份文件名的路径名:-

    File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),subdirectory);
    this.directory = dir.getPath();
然后添加实际的文件名(即用户输入)

注意!我进行检查以确定是否安装了外部存储器等。

要获取我使用的数据库路径,请执行以下操作:-

    String dbfilename = this.getDatabasePath(
            DBConstants.DATABASE_NAME).getPath();
    dbfile = new File(dbfilename);

这当然是Java,但我认为它可以被转换/调整以适应。答案的关键是将数据库文件放到一个可以访问它的位置。

从活动中调用ExtractDb方法

public void ExtractDB()
        {
            var szSqliteFilename = "databasename.db3";
            var szSourcePath = new FileManager().GetLocalFilePath(szSqliteFilename);

            var szDatabaseBackupPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/databasename_Backup.db3";
            if (File.Exists(szSourcePath))
            {
                File.Copy(szSourcePath, szDatabaseBackupPath, true);
                Toast.MakeText(this, "Copied", ToastLength.Short).Show();
            }
        }
获取android设备存储的路径,如下所示

public class FileManager
    {
        public string GetLocalFilePath(string filename)
        {
            string path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            return Path.Combine(path, filename);
        }
    }

您需要在清单文件中添加android.permission.WRITE_EXTERNAL_存储权限。

是否可以在下载文件夹中存储和使用db文件?工作正常,谢谢。有关更多详细信息,请参见我编辑的问题。