Akavache无法打开数据库文件

时间:2014-05-24 03:57:20

标签: android sqlite mono xamarin

我有两个项目 - 一个PCL(个人资料7)和一个Android应用程序(以API为目标......但另外我希望它以10为目标)。

PCL已经从Nuget安装了akavache。 Android应用已安装akavache.sqlite3。对于后者,我还必须引用Rx-PlatformServices以便构建项目。

Android应用引用了PCL。

默认Android活动上有一个按钮,如下所示:

button.Click += async (sender, e) =>
{
    var d = new DataService();
    await d.SaveData();
    var ss = await d.LoadData();
    button.Text = ss;
};

PCL具有以下代码。

public class DataService
{
    private IBlobCache blobStore;

    public DataService()
    {
        BlobCache.ApplicationName = "DamienApp";
        this.blobStore = BlobCache.UserAccount;
    }
    public async Task SaveData()
    {
        var data = new Person {Name = "Sienna", Age = 3};
        await this.blobStore
                    .InsertObject<string>("mykey", JsonConvert.SerializeObject(data));
    }

    public async Task<string> LoadData()
    {
        var data = await this.blobStore.GetObjectAsync<string>("mykey");
        return data;
    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

按下按钮我发出以下错误。

  

[mono] Unhandled Exception:[mono] SQLite.SQLiteException:不能   打开数据库文件:BlobCache / userblobs.db(CannotOpen)[mono] at   SQLite.SQLiteConnection..ctor(System.String databasePath,   SQLiteOpenFlags openFlags,Boolean storeDateTimeAsTicks)[0x0006d] in   /Users/paul/github/Akavache/Akavache.Sqlite3/SQLite.cs:125 [mono]
  在SQLite.SQLiteConnectionWithoutLock..ctor   (SQLite.SQLiteConnectionString connectionString,SQLiteOpenFlags   标志)[0x00000] in   /Users/paul/github/Akavache/Akavache.Sqlite3/SQLiteAsync.cs:344   SQLite.SQLiteConnectionPool + Entry..ctor中的[mono]   (SQLite.SQLiteConnectionString connectionString,SQLiteOpenFlags   标志)[0x0000d] in   /Users/paul/github/Akavache/Akavache.Sqlite3/SQLiteAsync.cs:330   [mono] at SQLite.SQLiteConnectionPool + c__AnonStorey14。&lt;&gt; m__25   (Int32 _)[0x00000] in   /Users/paul/github/Akavache/Akavache.Sqlite3/SQLiteAsync.cs:309   [单声道]   System.Linq.Enumerable + c__Iterator10`2 [System.Int32,SQLite.SQLiteConnectionPool + Entry] .MoveNext()[0x00000] in:0 [mono] at System.C

我想知道这是否是某种安全问题。这都是我可以访问root的手机(Galaxy note 2)。

有什么想法吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

距您提出这个问题已有一百万年了,但您可能没有设置应用程序名称:

BlobCache.ApplicationName = "MyAppName";