尝试获取SQLite数据库连接时为什么会出现Null引用异常?

时间:2018-08-29 18:01:02

标签: sqlite xamarin.forms nullreferenceexception

我正在尝试创建一个SQLite Dabase,但是出现异常。该错误并不能说明为什么发生异常。它只是说一个Null引用异常。

var connection = `DependencyService.Get<ISQLiteDB>().GetConnection();`

在构造函数中。

这是我的.cs文件

using App4.Persistence;
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace App4
{

    public class Contact
    {

        [PrimaryKey,AutoIncrement]
        public int  Id { get; set; }

        [MaxLength (255)]
        public string Name { get; set; }
    }

    public partial class MainPage : ContentPage
    {

        public string ConnectionPath { get; set; }
        public MainPage()
        {
            InitializeComponent();

            var connection = DependencyService.Get<ISQLiteDB>().GetConnection();


        }

        protected async override void OnAppearing()
        {
            var connection = new SQLiteAsyncConnection(ConnectionPath);

            await connection.CreateTableAsync<Contact>();
            var contacts = await connection.Table<Contact>().ToListAsync();
            listViewContacts.ItemsSource = contacts;


            base.OnAppearing();
        }

        private void buttonAdd_Clicked(object sender, EventArgs e)
        {

        }

        private void buttonDelete_Clicked(object sender, EventArgs e)
        {

        }

        private void buttonUpdate_Clicked(object sender, EventArgs e)
        {

        }
    }
}

这是我通过在iOS和Android中以不同方式实现数据库路径来获取数据库路径的不同信念

>     
    > using SQLite;
    > using System;
    > using System.Collections.Generic;
    > using System.Text;
    > 
    > namespace App4.Persistence
    > {
    >     public interface ISQLiteDB
    >     {
    >         SQLiteAsyncConnection GetConnection();
    > 
    >     }
    > }

这是iOS和Android中的实现。

using System;
using System.Collections.Generic;
using System.IO;
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 App4.Persistence;
using SQLite;

namespace App4.Droid.Persistence
{
   public class SQLiteDB : ISQLiteDB
    {
        public SQLiteAsyncConnection GetConnection()
        {
            var documentsPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
            var  DatabasePath = Path.Combine(documentsPath,"MySQLite.db3");

            return new SQLiteAsyncConnection(DatabasePath);

        }

    }
}

尽管iOS和Android的实现是相同的(并且在这种情况下不需要界面),但我将为需要创建不同路径以获取数据库路径的Windows创建项目。

任何帮助都是值得赞赏的人。

谢谢。

1 个答案:

答案 0 :(得分:0)

例外的问题是没有在实现类中定义依赖项属性,我应该在名称空间定义的上方而不是在类中使用[assembly: Dependency (typeof (SQLiteDB)]

尽管当我尝试通过dependency属性注册实现类时,仍然出现另一个错误。

我收到此错误:

  

没有对应于形式参数的参数   “ LoadHintArgument”或DependecyAtrrbute.DependencyAttribute(string   LoadHint)。

感谢您对该主题的任何帮助。