SqliteConnection Xamarin表单未处理异常?

时间:2018-07-04 08:10:59

标签: sqlite xamarin.forms

当我尝试运行项目时,出现了这样的错误:“ System.NullReferenceException:对象引用未设置为对象的实例”

指向此代码: sqliteconnection = DependencyService.Get()。GetConnection();

这是我针对数据库操作的课程:

namespace DevoApp.DevoAppFinal.Helpers
{
    public class DatabaseHelper
    {
        static SQLiteConnection sqliteconnection;
        public const string DbFileName = "Devotion.db";

        public DatabaseHelper()
        {
            sqliteconnection = DependencyService.Get<ISQLite>().GetConnection();
            sqliteconnection.CreateTable<Devotion>();
        }

        // Get All Contact data    
        public List<Devotion> GetAllDevotionsData()
        {
            return (from data in sqliteconnection.Table<Devotion>() select data).ToList();
        }

        //Get Specific Contact data
        public Devotion GetDevotionData(int id)
        {
            return sqliteconnection.Table<Devotion>().FirstOrDefault(t => t.devotionalId == id);
        }

        // Delete all Contacts Data
        public void DeleteAllDevotions()
        {
            sqliteconnection.DeleteAll<Devotion>();
        }

        // Delete Specific Contact
        public void DeleteDevotion(int id)
        {
            sqliteconnection.Delete<Devotion>(id);
        }

        // Insert new Contact to DB 
        public void InsertDevotion(Devotion contact)
        {
            sqliteconnection.Insert(contact);
        }

        // Update Contact Data
        public void UpdateDevotion(Devotion contact)
        {
            sqliteconnection.Update(contact);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用DependencyService时,必须在每个目标平台项目中实现该接口。

在这种情况下,您应该在目标平台(即iOS和Android)上实现ISQLite接口。

要使Xamarin在运行时找到它,您将必须使用名称空间上方的Dependency属性来注册实现。根据您的项目的一些假设,观察以下示例。

在共享库中,您已经声明了接口:

public interface ISQLite
{
    // Members here
}

那儿没有幻想。然后,对于每个平台,要运行该应用程序,请执行以下操作:

[assembly: Xamarin.Forms.Dependency (typeof (SQLiteImplementation_iOS))]
namespace DevoApp.DevoAppFinal.iOS
{
    public class SQLiteImplementation_iOS : ISQLite
    {
        // ... Your code
    }
}

从错误中看,您似乎忘记了添加属性