2017-07-10 2 views
0

Xamarin Formsアプリケーション内でLiteDBを使用しようとしていますが、ファイルへの書き込みまたは読み取りにアクセスできないようです。私MainViewModel.csXamarin LiteDB UnauthorisedAccessException

LiteRepository Error

から呼び出され

私はのAndroidManifest.xmlに権限を追加しました。

<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" /> 

Android 6.0で自分のアプリケーションにアクセス許可を追加しました。

Android 6.0 Permissions

アップデート:私はパスへのアクセスをチェックしました、そしてファイルを書き出すことができます。

string documentsPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath; 

var dirPath = documentsPath + "/MyTestFolder"; 
var exists = Directory.Exists(dirPath); 
var filepath = dirPath + "/test.txt"; 
if (!exists) 
{ 
    Directory.CreateDirectory(dirPath); 
    if (!System.IO.File.Exists(filepath)) 
    { 
     var newfile = new Java.IO.File(dirPath, "test.txt"); 
     using (FileOutputStream outfile = new FileOutputStream(newfile)) 
     { 
      string line = "The very first line!"; 
      outfile.Write(System.Text.Encoding.ASCII.GetBytes(line)); 
      outfile.Close(); 
     } 
    } 
} 

ただし、このコードは失敗します。

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; 
} 

答えて

0

あなたはストア/あなたのファイルへのアクセスにアクセスするには、Androidに次のコードを使用する必要があります。

var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
var dirPath = Path.Combine(myPath, "MyDB.db"); 
0

私はリポジトリパターンを使用している場合は、すべてが順調です。

using (var db = new LiteRepository("/storage/emulated/0/MyData/MyDB.db")) 
{ 
    db.Insert(new TestClass {Id = 1}); 
} 

LiteDBリポジトリパターン https://github.com/mbdavid/LiteDB/wiki/LiteRepository

+0

あなたは/ストレージ/エミュレートは、すべての場合に動作しますか? – hugoterelle

+0

私は確信していませんが、私は外部ストレージを読み書きする権限を持っていることを確認し、Android.OS.Environment.ExternalStorageDirectory.AbsolutePathを使用してパスを取得します – wonea

関連する問題