Адаптер Spinner - Xamarin Android - PullRequest
0 голосов
/ 29 мая 2020

У меня проблема с adapter для моего spinner, который берет данные из базы данных SQLite и пытается показать набор строк в результате счетчика.

Он отправляет мне следующее сообщение об ошибке:

«Возникло исключение типа 'Java .Lang.NullPointerException'». когда я нажимаю на счетчик с запущенным приложением, если он не был в режиме try / catch, приложение зависало.

Может ли кто-нибудь помочь мне найти, в чем проблема? Код ниже:

Код действия

private string[] _companyNames;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            SetContentView(Resource.Layout.a_plant);

            Spinner spCompanyName = FindViewById<Spinner>(Resource.Id.spCompanyName);
            EditText etPlantName = FindViewById<EditText>(Resource.Id.etPlantName);

            Button btnAdd = FindViewById<Button>(Resource.Id.btnAdd);
            Button btnSearch = FindViewById<Button>(Resource.Id.btnSearch);

            //Adds data to the spinner only if they dont exist already
            DBManager.LoadCompanySpinner(_companyNames);

            //shows data on spinner
            try
            {
                //THIS IS WHERE THE EXCEPTION IS CAUGHT
                ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, _companyNames);
                //
                adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
                spCompanyName.Adapter = adapter;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

DBManager Код для добавления данных на spinner

Я считаю, что этот код работает, поскольку он печатается на Консолируйте результаты.

//insert data in spinner
        public static void LoadCompanySpinner(string[] l)
        {
            var t = DBManager.Instance.Query<Company>("Select CompanyName from company");
            int size = t.Count;
            if(size > 0)
            {
                l = new string[size + 1];
                l[0] = "Select Company...";
                for (var i = 0; i < size; i++)
                {
                    l[i + 1] = t[i].CompanyName;
                    Console.WriteLine("added " + t[i].CompanyName);
                }
            }
        }

1 Ответ

0 голосов
/ 03 июня 2020

Я, наконец, исправил это!

Я изменил array на List<string>, потому что ошибка была в string[] _companyNames, так как я никогда не назначал Length, значение всегда будет Null, поэтому ведущее в:

Java .Lang.NullPointerException

Я никогда не мог использовать массив с длиной stati c, потому что мне всегда нужно будет добавлять новые значения , поэтому список с длиной c должен быть лучшим вариантом.

Это окончательный результат:

По активности ->

Изменено: private string[] _companyNames; на List<string> _companyNames = new List<string>();

, и в Global Activity были внесены некоторые изменения, поэтому он будет работать со списком:

public static void LoadCompanySpinner(List<string> l)
        {
            var t = DBManager.Instance.Query<Company>("Select CompanyName from company");
            int size = t.Count;
            if(size > 0)
            {
                l.Add("Select Company ... ");
                for (var i = 0; i < size; i++)
                {
                    l.Add(t[i].CompanyName);
                    Console.WriteLine("added " + t[i].CompanyName);
                }
            }
        }

Спасибо за советы!

...