每当我点击对话框中的“确定”按钮时,我都会遇到空指针异常。
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()
?如果是,我怎样才能获得文本的值?
谢谢
答案 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);