空指针异常 - 警报内的表格Dialog Android

时间:2013-01-05 09:29:11

标签: android android-edittext android-alertdialog

每当我点击对话框中的“确定”按钮时,我都会遇到空指针异常。

public class TestActivity extends ListActivity {

    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;
        setContentView(R.layout.activity_bucket_crud);

    }

    public void addTestItem(View view) {
        LayoutInflater inflater = getLayoutInflater();
        new AlertDialog.Builder(this)
            .setTitle("Add Item")
            .setIcon(R.drawable.add)
            .setView(inflater.inflate(R.layout.activity_bucket_crudadd, null))
            .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    EditText text = (EditText)findViewById(R.id.editTextAdd);
                    DatabaseHandler myDbHelper = new DatabaseHandler(context);
                    myDbHelper.insertItem(text.getText().toString());
                }
            })
            .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    dialog.cancel();
                }
            }).show();
    }

}

这是错误

01-05 09:20:35.052: E/AndroidRuntime(761): FATAL EXCEPTION: main
01-05 09:20:35.052: E/AndroidRuntime(761): java.lang.NullPointerException
01-05 09:20:35.052: E/AndroidRuntime(761):  at com.example.test.TestActivity$1.onClick(TestActivity.java:65)
01-05 09:20:35.052: E/AndroidRuntime(761):  at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)

我的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="150dp">

    <EditText
        android:id="@+id/editTextAdd"
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:ems="10"
        android:inputType="textMultiLine"
        android:layout_margin="5dp" 
        android:padding="3dp">

        <requestFocus />
    </EditText>

</RelativeLayout>

似乎当我在EditText中输入文本时,该值未被读取..

EditText text = (EditText)findViewById(R.id.editTextAdd);

这是空指针的原因,因为该行指向(text.getText().toString()?如果是,我怎样才能获得文本的值

谢谢

2 个答案:

答案 0 :(得分:3)

因为EditText text NULL 。您没有从对话框布局中引用EditText text

只需改变你的行,让我知道发生了什么......

 EditText text = (EditText) dialog.findViewById(R.id.editTextAdd);

要从对话框布局获取EditText引用,您必须使用dialog方法findViewById()引用。

<强>更新

LayoutInflater inflater = getLayoutInflater();
View view = null;
view  = inflater.inflate(R.layout.activity_bucket_crudadd, null);
        new AlertDialog.Builder(this)
            .setTitle("Add Item")
            .setIcon(R.drawable.add)
            .setView(view)

现在可以访问编辑文本,例如

EditText text = (EditText) view.findViewById(R.id.editTextAdd);

答案 1 :(得分:2)

您无法在对话侦听器的OnClick()方法中创建EditText实例。将EditText实例创建为全局对象,并在将其插入数据库时​​使用该引用。 findViewById()方法仅在子活动内部使用,当您尝试在其他类/接口中使用时,将更改上下文。

或者您也可以尝试以下代码:

EditText text = (EditText)TestActivity.this.findViewById(R.id.editTextAdd);
相关问题