为什么我会在空对象引用上获取EditText.getText()'?
我正在构建一个在FAB单击时显示警告对话框的应用程序,接受用户输入并使用该用户输入命名ExpandableListView组标题。当我点击FAB按钮并放入文本时,它会给我一个空对象引用。为什么我会在空对象引用上获取EditText.getText()'?
我初始化我的学期前onCreate()
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
ExpandableListView expandableListView;
ExpandableListViewAdapter adapter;
private FloatingActionButton addItems;
private String semester = "";
在我addItems()
方法,它是当有FAB点击调用,我创建我的自定义警告对话框,让用户输入字符串和配售它在我的ArrayList中的适配器。
public void addItems() {
final EditText et_semester = (EditText)findViewById(R.id.et_semester);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Create A Semester");
builder.setView(R.layout.custom_layout);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
semester = et_semester.getText().toString();
adapter.groupNames.add(semester);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
adapter.notifyDataSetChanged();
builder.show();
}
但是,当我点击AlertDialog完成按钮,这是我的堆栈跟踪:
05-30 05:35:10.295 20943-20943/myapp.onur.expandablelistviewexample E/AndroidRuntime: FATAL EXCEPTION: main
Process: myapp.onur.expandablelistviewexample, PID: 20943
java.lang.NullPointerException: Attempt to invoke virtual method 'android.text.Editable android.widget.EditText.getText()' on a null object reference
at myapp.onur.expandablelistviewexample.MainActivity$1.onClick(MainActivity.java:45)
编辑这是我MainActivity
:
public class MainActivity extends AppCompatActivity {
ExpandableListView expandableListView;
ExpandableListViewAdapter adapter;
private FloatingActionButton addItems;
private String semester;
int counter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
expandableListView = (ExpandableListView) findViewById(R.id.expListView);
adapter = new ExpandableListViewAdapter(MainActivity.this);
expandableListView.setAdapter(adapter);
addItems = (FloatingActionButton) findViewById(R.id.add_items);
final EditText et_semester = (EditText)findViewById(R.id.et_semester);
}
public void addSemester(View v){
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Create A Semester");
builder.setView(R.layout.custom_layout);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
final EditText et_semester = (EditText).findViewById(R.id.et_semester);
semester = etSemester.getText().toString();
adapter.groupNames.add(semester);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
adapter.notifyDataSetChanged();
builder.show();
}
}
你的EditText R.id .et_semester不在您的活动内容视图中,因此您必须在对话视图中找到此视图
// Inflate your view
View dialogView = LayoutInflater.from(context).inflate(R.layout.custom_layout, null);
// Bind views
final EditText et_semester = (EditText) dialogView.findViewById(R.id.et_semester);
// Create dialog
AlertDialog.Builder builder = new AlertDialog.Builder(context)
.setTitle("Create A Semester")
.setView(dialogView)
.setCancelable(false);
我在我的'addItems()'方法中初始化dialogView吗? –
@OnurOzbek是的,应该工作 –
汉克穆迪的回答是正确的。这就是我所做的。
public void addSemester(View v){
View dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.custom_layout, null);
final EditText et_semester = (EditText)dialogView.findViewById(R.id.et_semester);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Create A Semester");
builder.setView(dialogView);
builder.setCancelable(false);
builder.setPositiveButton("DONE", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
semester = et_semester.getText().toString();
adapter.groupNames.add(semester);
}
});
builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
adapter.notifyDataSetChanged();
builder.show();
}
调用方法addSemester()
在onCreate()
是不是一个好主意,因为在该方法中的某些设置,通过FAB点击触发的,但如果你将其放置在onCreate()
方法,它们运行的瞬间活动创建。
请发表您的onCreate方法 – lelloman
move'final EditText et_semester =(EditText)findViewById(R.id.et_semester);'OnCreate'方法 –
@lelloman它在那里。 –