尝试建立sqlite连接导致空引用

时间:2020-05-21 20:19:00

标签: c# sqlite xamarin.forms

Xamarin在这里构成新手,并且我正在尝试建立SQLite连接,以便可以与应用程序中创建的数据库进行交互。

我在IDE中对此没有任何标志,但是当我编译时,出现了空引用错误!具体来说,我的_SQLiteConnection变量为null,我认为这可能与未正确设置路径有关?

我已经参考了一些在线进行此操作的指南,尽管有些陈旧,但他们还是以与我相同的方式进行设置。

这里有一些代码:

UserDb.cs:

using PluralBuddy.Models;
using SQLite;
using System.Collections.Generic;
using System.Linq;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace PluralBuddy.Data
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public class UserDB
    {
        private SQLiteConnection _SQLiteConnection;

        public UserDB()
        {

            _SQLiteConnection = DependencyService.Get<ISQLiteInterface>().GetConnection();
            _SQLiteConnection.CreateTable<User>();
        }

ISQLiteInterface.cs:

using SQLite;

namespace PluralBuddy.Models
{
    public interface ISQLiteInterface
    {
        SQLiteConnection GetConnection();
    }
}

Nullreference

_SQLiterConnection is null

参考:

https://code.tutsplus.com/tutorials/an-introduction-to-xamarinforms-and-sqlite--cms-23020

https://dzone.com/articles/register-and-login-using-sqlite-in-xamarinforms

一如既往,我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

因此,对于偶然发现本文的人,以寻找类似问题的答案,请确保您正在初始化数据库并为其提供路径。请严格遵循指南,因为它们经常会遗漏重要的上下文,无论是有意还是无意。

这就是我所做的

在App.Xaml中

using PluralBuddy.Data;
using PluralBuddy.Views;
using System;
using System.IO;
using Xamarin.Forms;

namespace PluralBuddy
{
    public partial class App : Application
    {

        static UserDB userDB;

        public static UserDB UserDB
        {
            get
            {
                if (userDB == null)
                {
                    userDB = new UserDB(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "user.db3"));
                }
                return userDB;
            }
        }

UserDB.cs

namespace PluralBuddy.Data
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public class UserDB
    {
        private readonly SQLiteConnection _SQLiteConnection;

        public UserDB(string dbPath)
        {
            _SQLiteConnection = new SQLiteConnection(dbPath);
            _SQLiteConnection.CreateTable<User>();
        }


以防万一有人需要它,这是来自原始帖子中引用的同一个人的最新指南:

https://xmonkeys360.com/2019/07/10/register-login-and-update-using-sqlite-in-xamarin-forms/