Android开发获取EditText的内容时出现空指针的异常情况,大神们指教啦

时间:2022-10-31 13:30:32
代码如下:
private void login() {
LayoutInflater factory=LayoutInflater.from(MainActivity.this);
View myView=factory.inflate(R.layout.login, null);
final EditText pass=(EditText)findViewById(R.id.pasEt);
new AlertDialog.Builder(MainActivity.this)
.setIcon(R.drawable.ic_launcher)
.setTitle("用户登录")
.setView(myView)
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
cursor=helper.getReadableDatabase()
.rawQuery("select password from password", null);
String str=pass.getText().toString();
cursor.moveToFirst();
String psw=String.valueOf(cursor.getString(0))
if(psw.equals(str)){
login.setEnabled(false);
Toast.makeText(MainActivity.this, "登陆成功!", Toast.LENGTH_LONG).show();
}
//
login.setEnabled(false);
//
}
})
.setNegativeButton("取消", 
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(MainActivity.this, "登陆失败!", Toast.LENGTH_LONG).show();
}
}).create().show();
}
红色字体为空指针位置

大神们帮忙看看吧,万分感谢!!!

6 个解决方案

#1


是不是因为你的EditText中并未赋值呢,试试在xml中给EditText上写点什么,看看还会空指针么

#2


final EditText pass=(EditText)findViewById(R.id.pasEt);

改成
final EditText pass=(EditText)myView.findViewById(R.id.pasEt);

#3


打印Log 看看pass.getText()是这个为空  还是pass为空

#4


引用 2 楼 tantahe 的回复:
final EditText pass=(EditText)findViewById(R.id.pasEt);

改成
final EditText pass=(EditText)myView.findViewById(R.id.pasEt);

Android开发获取EditText的内容时出现空指针的异常情况,大神们指教啦

#5


tantahe 是对的

#6


final EditText pass=(EditText)findViewById(R.id.pasEt);


通过findViewById 来获取控件,如果不指定父View,则默认是你这个activity的 layout,而如果你的layout中并没有这个ID,那么获取到的 pass 就是null。
你这里的 EditText 是属于你的弹出对话框中的控件,所以需要指定父View为你的对话框的layout,也就是

View myView=factory.inflate(R.layout.login, null);// 这个 myView 才是你的EditText控件的父View

#1


是不是因为你的EditText中并未赋值呢,试试在xml中给EditText上写点什么,看看还会空指针么

#2


final EditText pass=(EditText)findViewById(R.id.pasEt);

改成
final EditText pass=(EditText)myView.findViewById(R.id.pasEt);

#3


打印Log 看看pass.getText()是这个为空  还是pass为空

#4


引用 2 楼 tantahe 的回复:
final EditText pass=(EditText)findViewById(R.id.pasEt);

改成
final EditText pass=(EditText)myView.findViewById(R.id.pasEt);

Android开发获取EditText的内容时出现空指针的异常情况,大神们指教啦

#5


tantahe 是对的

#6


final EditText pass=(EditText)findViewById(R.id.pasEt);


通过findViewById 来获取控件,如果不指定父View,则默认是你这个activity的 layout,而如果你的layout中并没有这个ID,那么获取到的 pass 就是null。
你这里的 EditText 是属于你的弹出对话框中的控件,所以需要指定父View为你的对话框的layout,也就是

View myView=factory.inflate(R.layout.login, null);// 这个 myView 才是你的EditText控件的父View