Xamarin android System.NullReferenceException:对象引用未设置为对象的实例

时间:2016-11-08 06:32:55

标签: c# android xamarin.android

我是移动开发的新手。我正在使用xamarin中的visual studio 2015开发android。我正在关注这个sample code。我正在我的设备上部署我的应用程序,它运行良好。我基本上有以下功能

  1. 插入
  2. 显示
  3. 更新
  4. 删除
  5. 所有功能都运行良好但在更新时我点击update layout中的更新按钮,首先获取DB(SQLITE)中的所有数据,然后将其显示在{{1}在示例代码中,您可以看到Edit Text Boxes代码。所以在更新时我得到了波纹管错误

    enter image description here

    我在updateEmployee.cs中获取空值而dName字段中有名称

    上面我宣布了name dName等像贝娄

    dEmail

    同样在TextView dName, dEmail, dPhone, dDesignation; String name, email, phone, designation; 方法中,我也获得了空值,初始化中的initialize等是eName布局中的id,其axml如下

    complete_data

    更新1:

    Bellow是我得到此异常的代码

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp">
    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <ListView
                android:id="@+id/listView1"
                android:layout_width="match_parent"
                android:layout_height="350dp"
                android:divider="#000"
                android:dividerHeight="1dp" />
            <TextView
                android:id="@+id/eName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Name" />
            <TextView
                android:id="@+id/eEmail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Email" />
            <TextView
                android:id="@+id/ePhone"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Phone" />
            <TextView
                android:id="@+id/eDesignation"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Designation" />
        </LinearLayout></ScrollView></LinearLayout>
    

    名称字段位于 void List_ItemClick(object sender, AdapterView.ItemClickEventArgs e) { click_Employee = e.Position + 1; ICursor c = dbHelper.getSingleEntry(click_Employee); c.MoveToFirst(); name = c.GetString(c.GetColumnIndex(dbHelper.EMPLOYEE_NAME)); email = c.GetString(c.GetColumnIndex(dbHelper.EMPLOYEE_EMAIL)); phone = c.GetString(c.GetColumnIndex(dbHelper.EMPLOYEE_PHONE)); designation = c.GetString(c.GetColumnIndex(dbHelper.EMPLOYEE_DESIGNATION)); dName.Text = name; dEmail.Text = email; dPhone.Text = phone; dDesignation.Text = designation; } ,我将此字符串分配给我的编辑文本string等,如上面的代码所示。在dName我收到此dName.text = name例外,而名称字段包含名称。还有其他办法吗?

    我不确定我错过了什么。任何帮助都将受到高度赞赏

2 个答案:

答案 0 :(得分:1)

导致此问题的最可能原因是FindViewById未被调用或实际上未分配dname

这可能有多种原因:

  1. 您的initialize方法永远不会被调用
  2. List_ItemClick
  3. 之后调用
  4. 调用它但是分配视图失败,因为在XML中使用TextView而在代码中类型为EditText
  5. 设置两个断点。一个位于List_ItemClick,一个位于initialize。检查首先调用哪一个。单步执行initialize以确保查找和分配视图。

答案 1 :(得分:0)

首先,我从您的代码中看到,您已将dName声明为TextView,但是当您使用FindViewById时,您正在解析EditText,因此请确保在两个地方都使用TextView。

第二,确保您的代码按以下顺序运行: 1-将dName声明为TextView。 1-为“名称”变量分配一个值。 2-使用FindViewById查找eName。 3-为dName分配一个值。

因此,您的代码应如下所示:

TextView dName;
string name = "Some name"; // or you can get the name from database
dName = (TextView)FindViewById(Resource.Id.eName);
dName.Text = name;