0

我有一个对话框,其中包含两个编辑文本框。

在此处输入图像描述

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

我的代码如下

 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>

请帮我解决这个异常!!

4

6 回答 6

5

你的txtnametxtnumber是空的

IE

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);
于 2013-04-16T07:53:37.363 回答
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。

于 2013-04-16T07:52:32.543 回答
1

由于您没有提供完整的代码和堆栈跟踪,因此我进行了大胆的猜测,但我假设它是正确的:您使用 findViewById 从活动的内容视图而不是从膨胀视图获取编辑文本. 改变:

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

v.findViewById(R.id.editText1);
v.findViewById(R.id.editText1);
于 2013-04-16T07:52:38.460 回答
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());
                            }
于 2013-04-16T07:52:56.170 回答
1

请检查资源 ID,它也会导致 NPE。

于 2013-04-16T07:53:03.633 回答
1

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

dialog.findViewById

从这个范围。

于 2013-04-16T07:53:16.137 回答