SQLite Xamarin / C# вставка данных - PullRequest
0 голосов
/ 03 марта 2020

Я занимаюсь разработкой приложения. Я подключил свой проект к SQLIte, теперь я пытаюсь добавить объявление, что мне не удается сделать.

my SQLInterface 

public interface ISQLiteInterface
    {

        SQLiteConnection GetSQLiteConnection();

    }

мой дроид SQL

public class SQLiteDb : ISQLiteInterface
    {
        public SQLiteDb()
        {

        }
        public SQLiteConnection GetSQLiteConnection()
        {
            var fileName = "Mydatabase.db";
            var dbpath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            var path = Path.Combine(dbpath, fileName);
            var connection = new SQLiteConnection(path);


            return connection;
        }

    }
}

my model

 public class AdLogEntry
    {
        [PrimaryKey, AutoIncrement]
        public int Id { get; set; }
        public string SellerName { get; set; }
        public string Name { get; set; }
        public List<Picture> Pictures { get; set; }
        public List<Video> Videos { get; set; }
        public string Image { get; set; }
        public string Video { get; set; }

        public string Description { get; set; }
        public string Price { get; set; }
        public string  LoadedDate { get; set; }
        public string Location { get; set; }
        public int Age { get; set; }
    }

    public class Picture
    {
        public string Id { get; set; }
        public string Url { get; set; }
        public byte[] Image { get; set; }
    }
    public class Video
    {
        public string Id { get; set; }
        public string Url { get; set; }
        public byte[] ImageVideo { get; set; }
    }
}

это моя задача

private async void NextStep_Clicked(object sender, EventArgs e)
        {
           await SaveAdLog();
        }

        private async Task SaveAdLog()
        {
            if (string.IsNullOrWhiteSpace(NameEntry.Text) || (string.IsNullOrWhiteSpace(PriceEntry.Text) || (string.IsNullOrWhiteSpace(LocationEntry.Text))))
            {
                await DisplayAlert("error", "fill all entries", "OK");
            }
            else {
                var adLogEntry = new AdLogEntry
                {
                    Location = LocationEntry.Text,
                    Price = PriceEntry.Text,
                    Name = NameEntry.Text,

                };
                var result =  _adService.CreateAddLogEntry(adLogEntry); //ok
                if (result == null)
                {
                    await DisplayAlert("Gratulace", "", "OK");
                    App.Current.MainPage = new AppShell();
                }

            };

        }

это моя рекламная служба

  class AdService
    {
        private SQLiteConnection _conn;

        public AdService()
        {
            _conn = DependencyService.Get<Helpers.ISQLiteInterface>().GetSQLiteConnection();
            _conn.CreateTable<AdLogEntry>();

        }


        public string CreateAddLogEntry(AdLogEntry adLogEntry)
        {
            var detail =  _conn.Table<AdLogEntry>();
           var d1 = detail.Connection.Insert(adLogEntry);
           return "Thank you";
        }

    }

}

Однажды Я нажимаю кнопку ничего не происходит. Когда я пытаюсь отладить его, я получаю «Ссылка на объект не установлена ​​на экземпляр объекта».

Редактировать. Предполагается, что это приложение будет что-то вроде LetIt Go, поэтому все значения должны иметь возможность повторяться. Я реализовал интерфейс ISQLite.

Ответы [ 2 ]

0 голосов
/ 05 марта 2020

Я думаю, что SQLite не может обработать эти свойства в вашей модели

Список и Список public List<Picture> Pictures { get; set; } public List<Video> Videos { get; set; }

Я предлагаю изменить это свойство на string и сериализовать данные перед сохранением

0 голосов
/ 05 марта 2020

Согласно вашему сообщению об ошибке, я не вижу, где вы создаете новый экземпляр класса AdService.

Поэтому, пожалуйста, попробуйте добавить следующий код перед вызовом метода _adService.CreateAddLogEntry ().

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