SqliteConnection Xamarin создает исключение необработанным? - PullRequest
0 голосов
/ 04 июля 2018

Когда я пытаюсь запустить проект, я получаю такую ​​ошибку: «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 голосов
/ 04 июля 2018

При использовании DependencyService необходимо реализовать интерфейс в каждом целевом проекте платформы.

В этом случае у вас должен быть реализован интерфейс ISQLite на платформах, на которые вы ориентируетесь, то есть на iOS и Android.

Чтобы 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
    }
}

По ошибке похоже, что вы забыли добавить атрибут

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...