首页 文章

Android上的SQLite Xamarin.Forms PCL错误

提问于
浏览
0

我正在尝试在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有效

错误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活动

1 回答

  • 1

    Error CS0104: 环境来自'Android.OS.Environment'以及'System.Environment'所以给你和歧义问题 . 只是将系统置于环境之前 .

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

    Error CS0234: 好像你还没有添加SQLite-Async Nuget Package . 您必须在PCL以及Android项目中添加此项并再次构建项目 .

    Error CS0234 & CS0029: 确保在android和pcl项目中添加了以下两个nuget包 .

    Sqlite.Net PCL

    enter image description here

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

    enter image description here

    你的最终守则应该是:

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

    别忘了调整界面 . 应该是这样的:

    SQLiteConnection GetConnection():
    

    Note :如果不需要,可以省略Sqlite.Net.Async PCL参考 .

相关问题