我在引用方法时收到System.NullReferenceException

时间:2014-04-20 23:11:26

标签: c# android xamarin

我有一个按钮,点击后应调用方法。该程序将构建,但我在调用该方法时收到运行时错误System.NullReferenceException。该方法如何为空?例外情况发生在评论行。

 protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.Main);

            _countdown = (TextView)FindViewById(Resource.Id.countdown);

            Button buttonStop = FindViewById<Button>(Resource.Id.stopButton);
            //exception happens below
            buttonStop.Click +=  stopButton_Click;

            Button buttonSet = FindViewById<Button>(Resource.Id.setButton);
            buttonSet.Click += setButton_Click;

            Button buttonClear = FindViewById<Button>(Resource.Id.clearButton);
            buttonClear.Click += clearButton_Click;

            var back = FindViewById<Button>(Resource.Id.buttonBack);
            back.Click += (sender, e) =>
            {
                StartActivity(typeof(DM_App_Code_Fragment.MainScreen));
            };
...
        }

这是要调用的方法。

private void stopButton_Click(object sender, EventArgs e)
{
    StopTimer();
}

    private void StopTimer()
    {
        _timer.Enabled = false;
    }

这是与_timer相关的代码

    //initialization
    private System.Timers.Timer _timer = new System.Timers.Timer();

以下代码出现在OnCreate方法中。

        _timer.Interval = 1000;
        _timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
        _timer.Enabled = false;

这也是一个包含两个Resource.Designer.cs文件的小组工作。文件中有两个:一个在Resource.Designer.cs中,另一个在Resource.DesignerQT.cs中,所以我注释掉其中一个,因为我收到错误重复“global :: Android.Runtime.ResourceDesignerAttribute”属性。现在我认为这就是按钮为空的原因,因为资源文件未正确加载。有没有办法在项目中有两个Resource.Designer.cs文件或只允许一个?

[assembly:global::Android.Runtime.ResourceDesignerAttribute("QuickTimer.Resource",   
IsApplication=true)]

这是xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <TextView
        android:text="Quick Timer"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textViewQuickTimer" />
    <TextView
        android:text="Hour"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:layout_below="@id/textViewQuickTimer"
        android:layout_marginLeft="50dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:id="@+id/textViewHours" />
    <TextView
        android:text="Min"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:layout_alignBaseline="@id/textViewHours"
        android:layout_alignBottom="@id/textViewHours"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textViewMinutes" />
    <TextView
        android:text="Sec"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:layout_alignBaseline="@id/textViewMinutes"
        android:layout_alignBottom="@id/textViewMinutes"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="60dp"
        android:id="@+id/textViewSeconds" />
    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textViewHours"
        android:prompt="@string/hours"
        android:layout_marginLeft="34dp"
        android:id="@+id/spinnerHours" />
    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textViewMinutes"
        android:layout_marginLeft="130dp"
        android:prompt="@string/minutes"
        android:id="@+id/spinnerMinutes" />
    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/textViewSeconds"
        android:layout_marginLeft="220dp"
        android:prompt="@string/seconds"
        android:id="@+id/spinnerSeconds" />
    <Button
        Click="setButton_Click"
        android:text="Set Timer / Start"
        android:layout_marginTop="15dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/spinnerMinutes"
        android:id="@+id/setButton"
        android:layout_marginLeft="95dp"
        android:clickable="true" />
    <TextView
        android:text="Timer Countdown"
        android:layout_marginLeft="100dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/setButton"
        android:id="@+id/countdown" />
    <Button
        Click="stopButton_Click"
        android:text="Stop"
        android:id="@+id/stopButton"
        android:layout_below="@id/countdown"
        android:layout_marginLeft="65dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <Button
        Click="clearButton_Click"
        android:text="Clear"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="205dp"
        android:layout_below="@id/countdown"
        android:id="@+id/clearButton" />
    <Button
        android:text="Back"
        android:layout_marginTop="35dp"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/clearButton"
        android:id="@+id/buttonBack" />
</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

在方法名称之前,似乎还有一个空间。

另外,您可以内联 StopTimer 方法。

答案 1 :(得分:0)

您可能过早地调用FindViewById,这就是它返回null引用的原因。 (等到onFinishInflate()完成)

对于类似的SO问题,请查看here