Xamarin.forms 如何定位抛出的方法;NullReferenceException:&x27;对象引用未设置为对象的实例';?

Xamarin.forms 如何定位抛出的方法;NullReferenceException:&x27;对象引用未设置为对象的实例';?,xamarin.forms,xamarin.android,nullreferenceexception,object-reference,Xamarin.forms,Xamarin.android,Nullreferenceexception,Object Reference,我已经检查了Stackoverflow的所有类似问题。他们中没有人回答或真正提出相同的问题 有没有办法找到试图引用空对象的方法 我理解它不能说什么对象,因为它不知道,但是它必须知道什么方法尝试空引用,但不会显示它。在调试模式下,代码屏幕显示: 您的应用程序已进入中断状态,但没有代码显示,因为所有线程都在执行外部代码(通常是系统或框架代码) 我点击Continue execution读取输出并从中找到它,但是输出中没有任何相关内容: **System.NullReferenceException

我已经检查了Stackoverflow的所有类似问题。他们中没有人回答或真正提出相同的问题

有没有办法找到试图引用空对象的方法

我理解它不能说什么对象,因为它不知道,但是它必须知道什么方法尝试空引用,但不会显示它。在调试模式下,代码屏幕显示:

您的应用程序已进入中断状态,但没有代码显示,因为所有线程都在执行外部代码(通常是系统或框架代码)

我点击Continue execution读取输出并从中找到它,但是输出中没有任何相关内容:

**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.'
Clients_Page.xaml.cs(只是构造函数)

Clients\u 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
类客户端\u视图模型:INotifyPropertyChanged
{
//性质_________________________________________________________
公共事件属性更改事件处理程序属性更改;
专用IRepository数据库{get;}
私人可观测收集客户;
公共可观测收集客户端
{
获取{返回客户端;}
设置
{
如果(值!=客户端)
{
客户=价值;
if(PropertyChanged!=null)
{
通知财产变更(“客户”);
}
}
}
}
公共异步void LoadClients()
{
Clients=newobserveCollection(wait database.GetAllClients());
}
私有void NotifyPropertyChanged(字符串propertyName)
{
PropertyChangedEventHandler处理程序=PropertyChanged;
if(null!=处理程序)
{
处理程序(这是新的PropertyChangedEventArgs(propertyName));
}
}
公共客户端_ViewModel()
{
database=App.database\u IRepository;
}
}//末级
}//端名称空间
Repository.cs(只是GetAllClient任务)

public异步任务getAllClient()
{
返回wait database.Table().OrderBy(c=>c.FirstName.toListSync();
}
Xaml只是一个使用ItemsSource=“{Binding Clients}”的列表视图,而ViewCell使用Text=“{Binding FirstName}”

我精通调试,并且会很高兴找到带有null对象引用的方法。我只需要知道如何让调试器显示所述方法

更新1:即使移除xaml中的所有绑定并移除对viewmodel的调用,也会触发异常。此外,除了ContentPage和主网格之外,我还尝试对整个客户机_Page.xaml进行注释,但仍然会引发错误。因此它不能是ViewModel或xaml

更新2:即使更改单击事件以导航到新页面,也会发生错误

我必须删除NavigationPage.SetHasNavigationBar(这个,false);从Main_Page.xaml.cs构造函数(下面显示完整块)


我添加这一行是为了在我的应用程序运行时删除难看的Android导航栏,但是Android页面导航似乎以某种方式链接到了该栏,因此我的启动视图无法导航到任何其他视图,设置为false

你能正确获取
客户端吗?如果是,尝试移动
客户机\u ViewModel ViewModel=新客户机\u ViewModel();LoadClients();BindingContext=viewModel
to
onApearing
method如果
FirstName
Client
的属性,则应在ViewCellClients中使用
Text=“{Binding FirstName}”
将LoadClients方法传递给它的3个对象。使用OnAppearing没有效果。我已经尝试将Clients.FirstName改为FirstName,很抱歉我忘了编辑它。谢谢你的评论,虽然“输出中没有任何相关内容”——嗯?堆栈跟踪就在那里,告诉您引发异常的方法是
Xamarin.Forms.Grid.NumberOfUnsetRowHeight(Xamarin.Forms.BindableObject子级)[0x00014],位于D:\a\1\s\Xamarin.Forms.Core\GridCalc.cs:627
。这怎么不相关?这怎么不正是您要问的如何查找的问题呢?我认为这不可能,因为我删除了行,并且ListView中没有网格。此外,我还删除了所有绑定,以防它试图在ListView之前加载数据,但出现相同的错误。我在谷歌上搜索了一下,除了我自己,没有人用stacktrace这一行发帖提问。除非在这里得到回答或者我能找到答案,否则几乎没有在线解决方案。很高兴听到这个消息*^。顺便说一句,如果RootPage不是NavigationPage,您也可以使用
Navigation.PushModalAsync(xxx),则它也将工作。最后,记得在可能的时候标记答案。
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
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
        public async Task<List<Client>> GetAllClients()
        {
            return await database.Table<Client>().OrderBy(c => c.FirstName).ToListAsync();
        }
public Main_Page()
        {
            InitializeComponent();
            //NavigationPage.SetHasNavigationBar(this, false);
            Main_ViewModel viewModel = new Main_ViewModel();
            viewModel.LoadCurrentBookings();
            BindingContext = viewModel;
        }