C# Xamarin LiteDB未经授权访问异常
我试图在Xamarin Forms应用程序中使用LiteDB,但是我似乎无法访问该文件的写入或读取 从my MainViewModel.cs调用 我已经向AndroidManifest.xml添加了权限C# Xamarin LiteDB未经授权访问异常,c#,android,xamarin.forms,android-6.0-marshmallow,litedb,C#,Android,Xamarin.forms,Android 6.0 Marshmallow,Litedb,我试图在Xamarin Forms应用程序中使用LiteDB,但是我似乎无法访问该文件的写入或读取 从my MainViewModel.cs调用 我已经向AndroidManifest.xml添加了权限 <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25" /> <uses-permission android:name="android.permission.INTERNET" /> &l
<uses-sdk android:minSdkVersion="23" android:targetSdkVersion="25" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_USER_DICTIONARY" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.READ_SOCIAL_STREAM" />
<uses-permission android:name="android.permission.READ_SYNC_STATS" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.SET_ORIENTATION" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_PROFILE" />
<uses-permission android:name="android.permission.WRITE_GSERVICES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
然而,该代码失败了
string documentsPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
var dirPath = documentsPath + "/MyData/MyDB.db";
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
using (var db = new LiteDatabase(dirPath))
{
// Get customer collection
var collection = db.GetCollection<T>(typeof(T).Name);
collection.Insert(tobj);
return true;
}
string documentsPath=Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;
var dirPath=documentsPath+“/MyData/MyDB.db”;
如果(!Directory.Exists(dirPath))
{
CreateDirectory(dirPath);
}
使用(var db=new LiteDatabase(dirPath))
{
//获取客户收集
var collection=db.GetCollection(typeof(T).Name);
收款。插入(tobj);
返回true;
}
您需要在Android中使用以下代码来访问存储/访问您的文件:
var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var dirPath = Path.Combine(documentsPath, "MyDB.db");
如果我使用repository模式,一切都很好
using (var db = new LiteRepository("/storage/emulated/0/MyData/MyDB.db"))
{
db.Insert(new TestClass {Id = 1});
}
LiteDB存储库模式
您确定/storage/emulated在任何情况下都能工作吗?我不确定,但会确保我有读写外部存储的权限,并使用Android.OS.Environment.ExternalStorageDirectory.AbsolutePath获取路径
using (var db = new LiteRepository("/storage/emulated/0/MyData/MyDB.db"))
{
db.Insert(new TestClass {Id = 1});
}