为什么在第二次设置它的ItemsSource时此选择 器崩溃?

问题描述 投票:0回答:2

我在App.cs中存储对象列表,因为我想在用户浏览其他内容页面(使用导航页面)时保留数据。当他返回到具有选择器的页面时,我希望上面有相同的项目,但是当再次设置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)
c# xamarin picker pickerview
2个回答
0
投票

如果在有注释的代码行上引发NullReferenceException,则只有3种可能性:PickerCidades为null,App为null或App.Current为null。如果您在该行上设置了一个断点并在调试器中将其暂停,则应该能够将鼠标悬停在每个单独的引用上,并查看哪个(或者可能多个)为空。


0
投票

我可以通过在选择器标签中添加x:FieldModifier =“ public static”来解决此问题。现在可以使用,无需更改后面的代码。

© www.soinside.com 2019 - 2024. All rights reserved.