【问题标题】:Button OnClick Error: Unhandled Exception: Object reference not set to an instance of an object [duplicate]按钮 OnClick 错误:未处理的异常:对象引用未设置为对象的实例 [重复]
【发布时间】:2017-08-24 19:23:45
【问题描述】:

我在 xamarin 中构建 OnClick 事件时遇到了问题。当我从我的Mainactivity 切换到我的loginActivity 时,它说

“未处理的异常:对象引用未设置为对象的实例。”

我该如何解决?我测试了许多“解决方案”,但没有人为我工作。

[Activity(Label = "Anmelden")]

public class Login : AppCompatActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        SetContentView(Resource.Layout.login);
        drawer();
        Button btnlogin = FindViewById<Button>(Resource.Id.login);
        btnlogin.Click += (object sender, EventArgs e) =>
        {
            btnlogin.Text = "Hello World!";
        };
    }        
    void drawer()
    {
        DrawerLayout drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
        // Init toolbar
        var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
        SetSupportActionBar(toolbar);
        // Attach item selected handler to navigation view
        var navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
        navigationView.NavigationItemSelected += NavigationView_NavigationItemSelected;
        navigationView.SetCheckedItem(Resource.Id.login);
        // Create ActionBarDrawerToggle button and add it to the toolbar
        var drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, Resource.String.open_drawer, Resource.String.close_drawer);
        drawerLayout.SetDrawerListener(drawerToggle);
        drawerToggle.SyncState();
        // Create your application here
        void NavigationView_NavigationItemSelected(object sender, NavigationView.NavigationItemSelectedEventArgs e)
        {
            switch (e.MenuItem.ItemId)
            {
                case (Resource.Id.nav_home):
                    StartActivity(typeof(MainActivity));                       
                    break;
                case (Resource.Id.login):                        
                    //StartActivity(typeof(Login));                     
                    break;
                case (Resource.Id.nav_friends):
                    break;
                case (Resource.Id.nav_discussion):
                    break;
            }
            // Close drawer
            drawerLayout.CloseDrawers();
        }
    }       
}}

对不起,我来自德国,英语不好。

【问题讨论】:

    标签: c# android xamarin xamarin.android xamarin.forms


    【解决方案1】:

    您能否确认哪条线路触发了 NRE?因为我很难帮助您,因为 NRE 在活动更改时触发可能有多种原因。

    有几件事困扰着我:

    • 您不能在 OnCreate(以及其中的任何方法)中使用 FindViewById,因为尚未创建 MainActivity 视图。您需要处理 OnCreateView 中的 UI 链接,如下所述: NRE exception FindViewById - StackOverflow。我有点确信这是你的 NRE。

    • 由于您使用多个活动,我建议您在离开活动之前取消订阅任何活动(包括 OnClick)。我不知道这是否是一个好习惯,但我总是订阅 OnResume 中的事件(活动和片段),并且总是在 OnPause 中取消订阅,除非我使用的是单一活动、锁定的旋转屏幕应用程序。

    【讨论】:

    • NRE 是什么意思?
    • 空引用异常。基本上是这里触发并给你消息“未处理的异常:对象引用未设置为对象的实例。”。
    • NRE 出现在第 11 行的位置:btnlogin.Click += (object sender, EventArgs e) => { btnlogin.Text = "Hello World!"; };
    • 那么毫不奇怪,这是因为您试图从尚未创建/膨胀的布局中检索您的按钮: Button btnlogin = FindViewById
    • 我无法使用 Activity.OnCreateView。那我该怎么办?
    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多