Android上的SQLite Xamarin.Forms PCL错误

时间:2017-10-18 16:27:05

标签: c# android sqlite xamarin cross-platform

我正在尝试在pcl项目中的xamarin(C#)上构建一个sqlite数据库。我正在关注this教程。在Android实现(步骤5)上,我收到了以下错误:

错误CS0104'环境'是'Android.OS.Environment'和'System.Environment'之间的模糊参考AlarmSQLite.Android c:\ users \ thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite.Android \ SQLite_Android。 cs 30 Active

错误CS0234命名空间“SQLite”中不存在类型或命名空间名称“Net”(您是否缺少程序集引用?)AlarmSQLite.Android c:\ users \ thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite .Android \ SQLite_Android.cs 33活跃

我使用的是VisualStudio2017。我试图删除.Net并添加了System.Environment但我得到了更多和新的错误。 我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using SQLite;
using Xamarin.Forms;
using AlarmSQLite.Droid;
using System.IO;

[assembly: Dependency(typeof(SQLite_Android))]

namespace AlarmSQLite.Droid
{
public class SQLite_Android : ISQLite
{
    public SQLite_Android() { }



    public SQLite.SQLiteConnection GetConnection()
    {
        var dbName = "AlarmDB.db3";
        var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
        var path = Path.Combine(documentsPath, dbName);

        var platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
        var connection = new SQLite.Net.SQLiteConnection(platform, path);

        return connection;
    }

}
}

教程中的一切都是一样的。我究竟做错了什么?谢谢!

新错误:

错误CS0234命名空间“SQLite”中不存在类型或命名空间名称“Platform”(您是否缺少程序集引用?)AlarmSQLite.Android C:\ Users \ Thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite .Android \ SQLite_Android.cs 33活跃

错误CS0029无法将类型'SQLite.Net.SQLiteConnection'隐式转换为'SQLite.SQLiteConnection'AlarmSQLite.Android C:\ Users \ Thomas \ source \ repos \ AlarmSQLite \ AlarmSQLite \ AlarmSQLite.Android \ SQLite_Android.cs 36 Active < / p>

1 个答案:

答案 0 :(得分:1)

错误CS0104: 环境来自'Android.OS.Environment'以及'System.Environment',因此给您带来歧义问题。只是将系统置于环境之前。

$var${$i}

错误CS0234:好像您还没有添加SQLite-Async Nuget Package。您必须在PCL以及Android项目和构建项目中添加它。

错误CS0234&amp; CS0029:确保在android和pcl项目中添加了以下两个nuget包。

Sqlite.Net PCL
enter image description here

然后,尝试使用Sqlite.Net而不是使用Sqlite。

enter image description here

你的最终守则应该是:

var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);

不要忘记调整界面。应该是这样的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Xamarin.Forms;
using AlarmSQLite.Droid;
using System.IO;
using SQLite.Net;
using SQLite.Net.Async;

[assembly: Dependency(typeof(SQLite_Android))]

namespace AlarmSQLite.Droid
{
public class SQLite_Android : ISQLite
{
    public SQLite_Android() { }



    public SQLiteConnection GetConnection()
    {
        var dbName = "AlarmDB.db3";
        var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
        var path = Path.Combine(documentsPath, dbName);

        var platform = new SQLite.Net.Platform.XamarinAndroid.SQLitePlatformAndroid();
        var connection = new SQLiteConnection(platform, path);

        return connection;
    }

}
}

注意:如果您不需要,可以省略Sqlite.Net.Async PCL参考。