按钮OnClick错误:未处理的异常:对象引用未设置为对象的实例

时间:2017-08-24 11:01:53

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

我在 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();
        }
    }       
}}

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

1 个答案:

答案 0 :(得分:0)

你能确认哪一行触发了NRE吗?因为NRE会因为几个原因而发生活动变化,所以我很难帮助你。

一些让我烦恼的事情:

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

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

    < / LI>