Почему происходит сбой этого средства выбора, когда я настраиваю его ItemsSource во второй раз? - PullRequest
0 голосов
/ 17 января 2020

Я храню список объектов в App.cs, потому что я хочу сохранить данные, пока пользователь переходит по другим страницам контента (используя страницу навигации). Когда он возвращается на страницу, на которой есть средство выбора, я sh хочу иметь те же элементы на нем, но приложение снова падает при установке ItemsSources.

Страница, которая содержит средство выбора:

public class Local
{
   public string cidade { get; set; }
   public int id { get; set; }
}

if (((App)App.Current).Backup.Count<1)
{
   try
   {
      using (WebClient browser = new WebClient())
      {
          Uri uriCidades = new Uri("xxxxx.php");
          jsonCidades = await browser.DownloadStringTaskAsync(uriCidades);
      }
      var ListaCidades = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Local>>(jsonCidades);
      PickerCidades.ItemsSource = ListaCidades; // it works as expected
      ((App)App.Current).Backup = ListaCidades;  // it works as expected
   }
   catch (Exception)
   {
      throw;
   }
}
else
{
    PickerCidades.ItemsSource = ((App)App.Current).Backup; // the app crashs here

}

Это в App.cs


public class Local
{
   public string cidade { get; set; }
   public int id { get; set; }
}
public List<Local> Backup = new List<Local>();

Ошибка вывода:

System.NullReferenceException: Object reference not set to an instance of an object.
  at MasterDetailPageNavigation.ContactsPage.CarregaCidades () [0x0016a] in ContactsPage.xaml.cs:56
  at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) [0x00000] in /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/mscorlib/system/runtime/compilerservices/AsyncMethodBuilder.cs:1021
  at Android.App.SyncContext+<>c__DisplayClass2_0.<Post>b__0 () [0x00000] in <11f101b564894ca7af6c482ddc51c698>:0
  at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <11f101b564894ca7af6c482ddc51c698>:0
  at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <11f101b564894ca7af6c482ddc51c698>:0
  at at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.47(intptr,intptr)

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Я мог бы решить эту проблему, добавив x: FieldModifier = "publi c stati c" в тег выбора. Теперь это работает, без изменений в коде.

0 голосов
/ 17 января 2020

Если он генерирует исключение NullReferenceException в строке кода, где у вас есть комментарий, тогда есть только 3 варианта: PickerCidades равен нулю, App равен нулю или App.Current равен нулю. Если вы установите точку останова в этой строке и сделаете паузу там в отладчике, вы сможете навести указатель мыши на каждую отдельную ссылку и посмотреть, какая из них (или, возможно, более одной) равна нулю.

...