Android:Dialog中的空指针异常

时间:2013-04-16 07:48:06

标签: android dialog nullpointerexception

我有一个对话框,其中包含两个edittextbox。

enter image description here

当我填写字段并单击提交按钮时,我需要将值保存在数据库中。我试图获取在字段中输入的值,但引发了空指针异常。

我的代码如下

 View v = getLayoutInflater().inflate(R.layout.sample, null);
            new AlertDialog.Builder(Context)
                    .setTitle(R.string.Details)
                    .setView(v)
                    .setNegativeButton(R.string.Cancel,
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    // TODO Auto-generated method stub

                                }
                            })
                    .setPositiveButton(R.string.Submit,
                            new DialogInterface.OnClickListener() {

                                @Override
                                public void onClick(DialogInterface dialog,
                                        int which) {
                                    final EditText txtname=(EditText)findViewById(R.id.editText1);
                                    final EditText txtnumber=(EditText)findViewById(R.id.editText2);
                                    Save(txtname.getText().toString(),txtnumber.getText().toString());
                                }

当我调试并检查时,它将txtname和txtnumber值显示为空。我哪里出错了?我正在使用布局来显示字段

布局是,

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TableRow>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Name" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="195dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:ems="10"
        android:hint="FirstName LastName"
        android:inputType="textPersonName" />

</TableRow>

<TableRow>

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="Phone" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:ems="10"
        android:inputType="number"
        android:maxLength="10" />

</TableRow>

请帮我解决这个例外!!

6 个答案:

答案 0 :(得分:5)

您的txtnametxtnumber为空

final EditText txtname=(EditText)findViewById(R.id.editText1);
 final EditText txtnumber=(EditText)findViewById(R.id.editText2);

当您尝试访问空引用时,您将获得NullPointerException

尝试让他们像这样

final EditText txtname=(EditText)v.findViewById(R.id.editText1);
 final EditText txtnumber=(EditText)v.findViewById(R.id.editText2);

答案 1 :(得分:1)

我认为你正在寻找错误的地方。尝试使用:

final View v = getLayoutInflater().inflate(R.layout.sample, null);

而不是

final EditText txtname=(EditText)v.findViewById(R.id.editText1);
final EditText txtnumber=(EditText)v.findViewById(R.id.editText2);

在“v”视图中找到EditText。

答案 2 :(得分:1)

由于你还没有提供完整的代码和堆栈跟踪,我猜错了,但我认为它是正确的: 您是从活动的内容视图中使用findViewById而不是从膨胀的视图中获取编辑文本。 变化:

findViewById(R.id.editText1);
findViewById(R.id.editText2);

v.findViewById(R.id.editText1);
v.findViewById(R.id.editText1);

答案 3 :(得分:1)

您需要从dialod的布局中获取视图

public void onClick(DialogInterface dialog,
                                    int which) {
    final EditText txtname=(EditText)dialog.findViewById(R.id.editText1);
    final EditText txtnumber=(EditText)dialog.findViewById(R.id.editText2);
                                Save(txtname.getText().toString(),txtnumber.getText().toString());
                            }

答案 4 :(得分:1)

请检查资源ID,它也会为NPE做出原因。

答案 5 :(得分:1)

findViewById与活动相关。您的视图不在活动中,而是在对话框中。你需要打电话

dialog.findViewById

来自这个范围。