Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/220.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android内部共享存储中的Xamarin SqlLite数据库_Android_Sqlite_Xamarin - Fatal编程技术网

Android内部共享存储中的Xamarin SqlLite数据库

Android内部共享存储中的Xamarin SqlLite数据库,android,sqlite,xamarin,Android,Sqlite,Xamarin,我的应用程序将离线使用,我计划每天通过USB电缆进行拉/推同步。我的用户处于一种非常原始的状态:没有wifi,也没有手机发射塔。我的问题不是关于同步,而是获取对数据的访问,以便我可以同步 我连接电缆,选择USB进行文件传输,我可以看到内部共享存储。但是我在任何地方都找不到我的SqlLite数据库。我已尝试为数据库使用以下路径: Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData); Environ

我的应用程序将离线使用,我计划每天通过USB电缆进行拉/推同步。我的用户处于一种非常原始的状态:没有wifi,也没有手机发射塔。我的问题不是关于同步,而是获取对数据的访问,以便我可以同步

我连接电缆,选择USB进行文件传输,我可以看到内部共享存储。但是我在任何地方都找不到我的SqlLite数据库。我已尝试为数据库使用以下路径:

Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData); 
Environment.GetFolderPath(Environment.SpecialFolder.Personal);
Android.App.Application.Context.FilesDir.AbsolutePath;
该应用程序可以很好地处理这些路径中的任何一条,数据被存储和检索,但我无法从我的电脑上看到数据库

我也试过这个,但它爆炸了:

Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath; Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryDownloads).AbsolutePath; 我已尝试使用Xamarin Live进行调试,但出现以下错误:

“您需要调用SQLitePCL.raw.SetProvider();”

我已尝试添加
console.writeline
Log.Error
以添加一些诊断,但在内部共享存储中找不到任何日志文件

我在清单中拥有
WRITE\u EXTERNAL\u STORAGE
WRITE\u EXTERNAL\u STORAGE
权限;即使我认为那是没有必要的

如果我可以将文件存储在内部共享存储中,那么我可以将数据库放在那里并访问它以进行同步。我可以创建一个简单的文本记录工具,在同一个地方写一个文本日志


40年来我很少寻求帮助,但我已经这样做了好几天了。谢谢

SQLite db存储在应用程序专用内存中,无法通过USB访问,请尝试将db的内容导出到内部内存或外部内存中的外部文件,以便能够通过USB chord访问它。

SQLite db存储在应用程序专用内存中,无法通过USB访问,尝试将数据库的内容导出到内部内存或外部内存中的外部文件,以便能够通过USB chord访问该文件。

要将文件导出到可通过USB访问的内部共享存储,请执行3个步骤: 1:获取运行时权限 ActivityCompat.RequestPermissions(活动,新字符串[]{Manifest.Permission.WriteExternalStorage,Manifest.Permission.ReadExternalStorage},1)

2) 使用以下路径:
字符串extPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; extPath=Path.Combine(extPath,“RtTrace.txt”); AppendAllText(extPath,“新内容”+System.Environment.NewLine)

3) 介质扫描生成的文件以使其可见:
MediaScannerConnection.ScanFile(Android.App.Application.Context,新字符串[]{extPath},null,null)

要将文件放入可通过USB访问的内部共享存储,需要执行3个步骤: 1:获取运行时权限 ActivityCompat.RequestPermissions(活动,新字符串[]{Manifest.Permission.WriteExternalStorage,Manifest.Permission.ReadExternalStorage},1)

2) 使用以下路径:
字符串extPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; extPath=Path.Combine(extPath,“RtTrace.txt”); AppendAllText(extPath,“新内容”+System.Environment.NewLine)

3) 介质扫描生成的文件以使其可见:
MediaScannerConnection.ScanFile(Android.App.Application.Context,新字符串[]{extPath},null,null)

Environment.SpecialFolder.Personal上的路径是指只有应用程序(例如,当您清除应用程序中的数据时,操作系统本身)可以访问的私有区域。我不知道
ApplicationData

您可以轻松地将应用程序文件(受保护的文件)复制到公共文件夹,如
下载
,或在公共存储空间中创建一个新文件夹
MyAppDirectory
,以允许从其他设备进行访问。然后,您可以清除不再需要的本地数据(在同步过程之后)

要在Android上创建新的公用文件夹,请执行以下操作:

var folder = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "MyAppDirectory");

System.IO.Directory.CreateDirectory(folder);
您将得到以下结果:

然后,复制文件:

var newFile = Path.Combine(folder, "MySharedFile"); // The database, xml, json, text or any file you want to share
var sourceFullName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"MyOriginalFile");

System.IO.File.Copy(sourceFullName, newFile, true /* overwrite */);

我希望它能有所帮助。

Environment.SpecialFolder.Personal上的路径指的是一个只有应用程序(以及在清除应用程序中的数据时操作系统本身)可以访问的私人区域。我不知道
ApplicationData

您可以轻松地将应用程序文件(受保护的文件)复制到公共文件夹,如
下载
,或在公共存储空间中创建一个新文件夹
MyAppDirectory
,以允许从其他设备进行访问。然后,您可以清除不再需要的本地数据(在同步过程之后)

要在Android上创建新的公用文件夹,请执行以下操作:

var folder = System.IO.Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, "MyAppDirectory");

System.IO.Directory.CreateDirectory(folder);
您将得到以下结果:

然后,复制文件:

var newFile = Path.Combine(folder, "MySharedFile"); // The database, xml, json, text or any file you want to share
var sourceFullName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal),"MyOriginalFile");

System.IO.File.Copy(sourceFullName, newFile, true /* overwrite */);

我希望这会有所帮助。

这些位置位于应用程序的沙箱中,因此是私有的,除非您的Android设备已扎根,否则无法通过
adb
(即文件传输)获得。您可以将sqlite db的副本存储在公共外部存储位置(即应用程序外部)并在那里访问。从笔记本电脑上,我可以看到“内部共享存储”,这与文件资源管理器中显示的“本地”和“内部存储”位置相同。很多应用程序将文件放在这里:摄像头、whatsApp、警报等。当我这样做时,它不可见,字符串extPath=Android.OS.Environment.GetExternalStoragePublicDirectory(Android.OS.Environment.DirectoryMusic);extPath=Path.Combine(extPath,“RtTrace.txt”);AppendAllText(extPath,“text content”+Environment.NewLine);我想我有办法解决你的问题。我面临着类似的问题。我回家后再发。你有没有找到解决办法?我也面临着同样的挑战,我希望我的用户能够通过连接电缆在手机和桌面之间同步数据,但找不到任何相关文档。这些位置位于应用程序的沙箱中,因此是私有的,除非您的安卓系统支持,否则无法通过
adb
(即文件传输)获得