【问题标题】:SQLite Xamarin.Forms PCL errors on AndroidAndroid 上的 SQLite Xamarin.Forms PCL 错误
【发布时间】:2017-10-18 16:27:04
【问题描述】:

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

错误 CS0104 'Environment' 是 '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 Active

【问题讨论】:

    标签: c# android sqlite xamarin cross-platform


    【解决方案1】:

    错误 CS0104: 环境来自“Android.OS.Environment”以及“System.Environment”,因此会给您带来歧义问题。只需将系统添加到环境中即可。

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

    错误 CS0234: 好像您还没有添加 SQLite-Async Nuget 包。您必须将它添加到您的 PCL 以及 Android 项目中并再次构建项目。

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


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

    你的最终代码应该是这样的:

    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():
    

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

    【讨论】:

    • 错误已解决,但出现新错误。平台(与 .Net 相同的错误)和返回连接时,该方法必须是 .Net。但是当我这样做时,我的连接界面有问题
    • 我只能在您的帖子中看到两个错误。请提及那些新错误。
    • 我更新了我的答案。您使用的是“SQLite”引用而不是“SQlite.Net”。
    猜你喜欢
    • 1970-01-01
    • 2017-10-27
    • 2017-01-30
    • 2021-09-17
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    相关资源
    最近更新 更多