AlertDialog.Builder ad=new AlertDialog.Builder(this);
ad.setTitle("请登录");
View ldView=LayoutInflater.from(MainActivity.this).inflate(R.layout.login_dialog,null, false);
ad.setView(ldView);
//通过sp对象在/data/data/SharedPreferences/目录下的创建或打开user.xml,指定只能被本应用程序读写
sp=this.getSharedPreferences("user", Context.MODE_PRIVATE);
//初始化登录框数据
if(sp.getBoolean("isRemenber", false))
{
etUserName.setText(sp.getString("userName",""));
etPassword.setText(sp.getString("password",""));
cbShowPw.setChecked(sp.getBoolean("isShowPw",false));
cbRemenber.setChecked(sp.getBoolean("isRemenber", false));
}
cbRemenber.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Editor edit=sp.edit();
String name=etUserName.getText().toString().trim();
String password=etPassword.getText().toString().trim();
if(cbRemenber.isChecked()){
edit.putString("userName", name);
edit.putString("password", password);
edit.putBoolean("isRember", true);
edit.putBoolean("isShowPw", cbShowPw.isChecked());
edit.commit();
}else{
edit.putString("userName","");
edit.putString("password","");
edit.putBoolean("isRember", false);
edit.putBoolean("isShowPw", cbShowPw.isChecked());
edit.commit();
}
}
});
cbShowPw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Editor edit=sp.edit();
if(cbShowPw.isChecked())
{
edit.putBoolean("isShowPw", true);
edit.commit();
//密码由密文变为明文
etPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
else{
//密码由明文变为密文
etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
});
我在这个对话框里插入一个布局文件,变量的实例化直接写成 下面这样
etUserName=(EditText)this.findViewById(R.id.et_userName);
etPassword=(EditText)this.findViewById(R.id.et_passWord);
btLogin=(Button)this.findViewById(R.id.bt_login);
btCancel=(Button)this.findViewById(R.id.bt_cancel);
cbShowPw=(CheckBox)this.findViewById(R.id.cb_showPw);
cbRemenber=(CheckBox)this.findViewById(R.id.cb_rember);
结果是运行的时候报错
两个checkbox的.setOnClickListener都是NullPointerException
后来想到,这是在main.xml中寻找id,但我需要的是login_dialog.xml中的id
故改成下面这样
AlertDialog.Builder ad=new AlertDialog.Builder(this);
ad.setTitle("请登录");
View ldView=LayoutInflater.from(MainActivity.this).inflate(R.layout.login_dialog,null, false);
etUserName=(EditText)ldView.findViewById(R.id.et_userName);
etPassword=(EditText)ldView.findViewById(R.id.et_passWord);
btLogin=(Button)ldView.findViewById(R.id.bt_login);
btCancel=(Button)ldView.findViewById(R.id.bt_cancel);
cbShowPw=(CheckBox)ldView.findViewById(R.id.cb_showPw);
cbRemenber=(CheckBox)ldView.findViewById(R.id.cb_rember);
ad.setView(ldView);
//通过sp对象在/data/data/SharedPreferences/目录下的创建或打开user.xml,指定只能被本应用程序读写
sp=this.getSharedPreferences("user", Context.MODE_PRIVATE);
//初始化登录框数据
if(sp.getBoolean("isRemenber", false))
{
etUserName.setText(sp.getString("userName",""));
etPassword.setText(sp.getString("password",""));
cbShowPw.setChecked(sp.getBoolean("isShowPw",false));
cbRemenber.setChecked(sp.getBoolean("isRemenber", false));
}
cbRemenber.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Editor edit=sp.edit();
String name=etUserName.getText().toString().trim();
String password=etPassword.getText().toString().trim();
if(cbRemenber.isChecked()){
edit.putString("userName", name);
edit.putString("password", password);
edit.putBoolean("isRember", true);
edit.putBoolean("isShowPw", cbShowPw.isChecked());
edit.commit();
}else{
edit.putString("userName","");
edit.putString("password","");
edit.putBoolean("isRember", false);
edit.putBoolean("isShowPw", cbShowPw.isChecked());
edit.commit();
}
}
});
cbShowPw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Editor edit=sp.edit();
if(cbShowPw.isChecked())
{
edit.putBoolean("isShowPw", true);
edit.commit();
//密码由密文变为明文
etPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
else{
//密码由明文变为密文
etPassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
}
}
});
运行正常