исключение нулевой ссылки, когда я удаляю элемент из базы данных области синхронизации в xamarin - PullRequest
0 голосов
/ 19 июня 2019

enter image description here Я получил исключение нулевой ссылки после удаления любого элемента из базы данных области синхронизации.элемент удаляется из базы данных, но он выдает исключение, и возникает ошибка. Я не знаю, почему он выбрасывает это исключение или где находится нулевой объект.

, но когда я удаляю эту строку, исключение исчезает: listView.ItemsSource= Сотрудники;

PS: это исключение появилось, когда я попытался синхронизировать базу данных области в режиме онлайн.

public MainPage()
    {
        InitializeComponent();
        Initialize();
        listView.ItemsSource = Employees;
    }    
private async Task Initialize()
    {
        _realm = await OpenRealm();
        Employees = _realm.All<Employee>();
        Entertainments= _realm.All<Entertainment>();
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Employees)));
    }

void OnDeleteClicked(object sender, EventArgs e)
    {
        try {
            var o = _realm.All<Employee>().FirstOrDefault(c => c.EmpId == 4);
            if (o != null)
                _realm.Write(() => { _realm.Remove(o); });
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Employees)));
        }
        catch (Exception exp)
        {
            string msg = exp.Message;
        }

    }

Вот снимок экрана исключения

1 Ответ

0 голосов
/ 20 июня 2019

ЭТО РЕШЕНО ИСКЛЮЧЕНИЕ! Спасибо . но список теперь не обновляется автоматически!

Согласно вашему коду и описанию, вы хотите удалить элемент из базы данных области и обновить Listview. Я считаю, что вы используете PropertyChanged для обновления сотрудников, но это не работает, потому что вы удаляете элемент из базы данных области, не меняете сотрудников, поэтому событие PropertyChanged не вызывается.

 List<Employee> Employees = new List<Employee>();
    private async Task Initialize()
    {
        _realm = await OpenRealm();
        Employees = _realm.All<Employee>().ToList(); ;
        Entertainments = _realm.All<Entertainment>();

    }
    void OnDeleteClicked(object sender, EventArgs e)
    {
        try
        {
            var o = _realm.All<Employee>().FirstOrDefault(c => c.EmpId == 4);
            if (o != null)
                _realm.Write(() => { _realm.Remove(o); });
            Employees = _realm.All<Employee>().ToList();
            listView.ItemsSource = Employees;
        }
        catch (Exception exp)
        {
            string msg = exp.Message;
        }

    }

Полезная статья для вас: https://dzone.com/articles/xamarinforms-working-with-realm-database

...