Я уже проверил все подобные вопросы на Stackoverflow. Никто из них не отвечает и не задает один и тот же вопрос.
Есть ли способ найти метод, который пытается ссылаться на указанный нулевой объект?
Iпонять, что он не может сказать, какой объект, поскольку он не знает, однако он должен знать, какой метод пытается использовать нулевую ссылку, но не показывает его. В режиме отладки на экране кода отображается:
«Ваше приложение вошло в состояние прерывания, но нет кода, который можно отобразить, поскольку все потоки выполняли внешний код (обычно системный или структурный код).»
Я нажал «Продолжить выполнение», чтобы прочитать вывод и найти его оттуда, однако в выводе не было ничего релевантного:
**System.NullReferenceException:** 'Loading...'
Thread finished: <Thread Pool> #4
The thread 0x4 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #5
The thread 0x5 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #2
The thread 0x2 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #3
The thread 0x3 has exited with code 0 (0x0).
Thread finished: <Thread Pool> #6
The thread 0x6 has exited with code 0 (0x0).
Thread started: <Thread Pool> #7
Thread started: <Thread Pool> #8
Thread started: <Thread Pool> #9
11-06 14:17:23.932 D/Mono ( 5445): DllImport attempting to load: '/system/lib/liblog.so'.
11-06 14:17:23.933 D/Mono ( 5445): DllImport loaded library '/system/lib/liblog.so'.
11-06 14:17:23.933 D/Mono ( 5445): DllImport searching in: '/system/lib/liblog.so' ('/system/lib/liblog.so').
11-06 14:17:23.933 D/Mono ( 5445): Searching for '__android_log_print'.
11-06 14:17:23.933 D/Mono ( 5445): Probing '__android_log_print'.
11-06 14:17:23.933 D/Mono ( 5445): Found as '__android_log_print'.
11-06 14:17:23.936 I/MonoDroid( 5445): UNHANDLED EXCEPTION:
11-06 14:17:23.938 I/MonoDroid( 5445): System.NullReferenceException: Object reference not set to an instance of an object.
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.Grid.NumberOfUnsetRowHeight (Xamarin.Forms.BindableObject child) [0x00014] in D:\a\1\s\Xamarin.Forms.Core\GridCalc.cs:627
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.Grid.MeasureStarredRows () [0x0007b] in D:\a\1\s\Xamarin.Forms.Core\GridCalc.cs:545
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.Grid.MeasureAndContractStarredRows (System.Double width, System.Double height, System.Double totalStarsHeight) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\GridCalc.cs:405
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.Grid.MeasureGrid (System.Double width, System.Double height, System.Boolean requestSize) [0x00117] in D:\a\1\s\Xamarin.Forms.Core\GridCalc.cs:512
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.Grid.OnSizeRequest (System.Double widthConstraint, System.Double heightConstraint) [0x0002a] in D:\a\1\s\Xamarin.Forms.Core\GridCalc.cs:60
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.VisualElement.OnMeasure (System.Double widthConstraint, System.Double heightConstraint) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\VisualElement.cs:762
11-06 14:17:23.938 I/MonoDroid( 5445): at Xamarin.Forms.VisualElement.GetSizeRequest (System.Double widthConstraint, System.Double heightConstraint) [0x00053] in D:\a\1\s\Xamarin.Forms.Core\VisualElement.cs:644
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Layout.GetSizeRequest (System.Double widthConstraint, System.Double heightConstraint) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Layout.cs:132
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.VisualElement.Measure (System.Double widthConstraint, System.Double heightConstraint, Xamarin.Forms.MeasureFlags flags) [0x00054] in D:\a\1\s\Xamarin.Forms.Core\VisualElement.cs:702
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.StackLayout.CalculateNaiveLayout (Xamarin.Forms.StackLayout+LayoutInformation layout, Xamarin.Forms.StackOrientation orientation, System.Double x, System.Double y, System.Double widthConstraint, System.Double heightConstraint) [0x000a8] in D:\a\1\s\Xamarin.Forms.Core\StackLayout.cs:163
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.StackLayout.CalculateLayout (Xamarin.Forms.StackLayout+LayoutInformation layout, System.Double x, System.Double y, System.Double widthConstraint, System.Double heightConstraint, System.Boolean processExpanders) [0x00058] in D:\a\1\s\Xamarin.Forms.Core\StackLayout.cs:123
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.StackLayout.LayoutChildren (System.Double x, System.Double y, System.Double width, System.Double height) [0x0004e] in D:\a\1\s\Xamarin.Forms.Core\StackLayout.cs:58
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Layout.UpdateChildrenLayout () [0x00158] in D:\a\1\s\Xamarin.Forms.Core\Layout.cs:266
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Layout.OnSizeAllocated (System.Double width, System.Double height) [0x0000f] in D:\a\1\s\Xamarin.Forms.Core\Layout.cs:224
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.VisualElement.SizeAllocated (System.Double width, System.Double height) [0x00000] in D:\a\1\s\Xamarin.Forms.Core\VisualElement.cs:784
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Layout.ForceLayout () [0x00000] in D:\a\1\s\Xamarin.Forms.Core\Layout.cs:125
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Platform.Android.ViewCellRenderer+ViewCellContainer.Update (Xamarin.Forms.ViewCell cell) [0x00185] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\ViewCellRenderer.cs:178
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Platform.Android.ViewCellRenderer.GetCellCore (Xamarin.Forms.Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context) [0x00027] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\ViewCellRenderer.cs:21
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Platform.Android.CellRenderer.GetCell (Xamarin.Forms.Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context) [0x00075] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\CellRenderer.cs:51
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Platform.Android.CellFactory.GetCell (Xamarin.Forms.Cell item, Android.Views.View convertView, Android.Views.ViewGroup parent, Android.Content.Context context, Xamarin.Forms.View view) [0x0001e] in D:\a\1\s\Xamarin.Forms.Platform.Android\Cells\CellFactory.cs:20
11-06 14:17:23.939 I/MonoDroid( 5445): at Xamarin.Forms.Platform.Android.ListViewAdapter.GetView (System.Int32 position, Android.Views.View convertView, Android.Views.ViewGroup parent) [0x00200] in D:\a\1\s\Xamarin.Forms.Platform.Android\Renderers\ListViewAdapter.cs:299
11-06 14:17:23.939 I/MonoDroid( 5445): at Android.Widget.BaseAdapter.n_GetView_ILandroid_view_View_Landroid_view_ViewGroup_ (System.IntPtr jnienv, System.IntPtr native__this, System.Int32 position, System.IntPtr native_convertView, System.IntPtr native_parent) [0x0001a] in <11a340ccc8de43f09c97400139266ef5>:0
11-06 14:17:23.939 I/MonoDroid( 5445): at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.68(intptr,intptr,int,intptr,intptr)
11-06 14:17:23.950 W/.TheStylingRoo( 5445): JNI RegisterNativeMethods: attempt to register 0 native methods for android.runtime.JavaProxyThrowable
11-06 14:17:23.954 D/Mono ( 5445): DllImport searching in: '__Internal' ('(null)').
11-06 14:17:23.955 D/Mono ( 5445): Searching for 'java_interop_jnienv_throw'.
11-06 14:17:23.955 D/Mono ( 5445): Probing 'java_interop_jnienv_throw'.
11-06 14:17:23.955 D/Mono ( 5445): Found as 'java_interop_jnienv_throw'.
**System.NullReferenceException:** 'Object reference not set to an instance of an object.'
Этот выводит меня в тупик. Исключение срабатывает при попытке загрузить страницу, которая отображает список клиентов, и другую, которая загружает бронирования. Обратите внимание, что стартовая страница имеет ту же логику для загрузки списка текущих бронирований и работает нормально.
Я проанализировал каждый связанный вопрос и попробовал следующие решения:
- Шаг за шагомкод. Он запускается в конце любого из двухстраничных конструкторов, не включая конструктор стартовой страницы. Все методы внутри этих конструкторов выполняются нормально.
- Ищем нули. Никакие объекты или свойства не имеют нулевого значения.
- Комментирование, попробуйте перехватить и если! Ни один из этих трех не исключает исключения.
- Воссоздание событий xaml. Я был уверен, что это так, но нет.
- Глядя на детали исключения. Всплывающее окно «Исключение» не содержит никаких сведений.
- Изменение асинхронных методов. Представление при запуске, которое отображает бронирования, является практически копией, включая асинхронные методы. Работает нормально.
- Удаление привязок.
- Очистка, восстановление, сброс настроек эмулятора Android до заводских настроек. В разном порядке
- Перезапуск Visual Studio
- Удаление папки bin и перезагрузка
Соответствующий код:
MainPage.xaml.cs (Только событиезагружает ClientsPage)
private async void Button_Clicked(object sender, EventArgs e)
{
try
{
await Navigation.PushAsync(new Clients_Page());
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
}
Clients_Page.xaml.cs (только конструктор)
public partial class Clients_Page : ContentPage
{
public Clients_Page()
{
InitializeComponent();
Clients_ViewModel viewModel = new Clients_ViewModel();
viewModel.LoadClients();
BindingContext = viewModel;
// Commenting all but InitializeComponent (Including Bindings in xaml) has no effect, so the ViewModel is not to blame
} // EXCEPTION FIRES AFTER THIS LINE
Clients_ViewModel.cs
class Clients_ViewModel : INotifyPropertyChanged
{
//PROPERTIES_________________________________________________________
public event PropertyChangedEventHandler PropertyChanged;
private IRepository database { get; }
private ObservableCollection<Client> clients;
public ObservableCollection<Client> Clients
{
get { return clients; }
set
{
if (value != clients)
{
clients = value;
if (PropertyChanged != null)
{
NotifyPropertyChanged("Clients");
}
}
}
}
public async void LoadClients()
{
Clients = new ObservableCollection<Client>(await database.GetAllClients());
}
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public Clients_ViewModel()
{
database = App.Database_IRepository;
}
}//endclass
}//endnamespace
Repository.cs (Justзадача GetAllClients)
public async Task<List<Client>> GetAllClients()
{
return await database.Table<Client>().OrderBy(c => c.FirstName).ToListAsync();
}
Xaml - это просто ListView, использующий ItemsSource = "{Binding Clients}" с ViewCell, использующим Text = "{Binding FirstName}"
Я опытный сотладка, и было бы весело найти метод с нулевой ссылкой на объект. Мне просто нужно знать, как заставить отладчик выявлять указанный метод.
ОБНОВЛЕНИЕ 1: Исключение срабатывает, даже когда все привязки в xaml удалены и вызов модели представления удален. Также я попытался прокомментировать весь Clients_Page.xaml, кроме ContentPage и основной сетки, и ошибка все еще срабатывает. Так что это не может быть ViewModel или xaml
ОБНОВЛЕНИЕ 2: ошибка возникает даже при изменении события щелчка для перехода на новую новую страницу