0

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

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()的原因吗?如果是,我怎样才能得到文本的价值

谢谢

4

2 回答 2

3

因为EditText textNULL。您不是指EditText text来自Dialog Layout

只是改变你的线路,让我知道发生了什么..

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

要从 Dialog Layout 获取EditText参考,您必须使用dialogreference withfindViewById()方法。

更新:

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);
于 2013-01-05T09:33:00.530 回答
2

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

或者你可以试试下面的代码:

EditText text = (EditText)TestActivity.this.findViewById(R.id.editTextAdd);
于 2013-01-05T09:30:26.817 回答