我正在尝试制作Android应用程序的注册表单。我使用MySQLite创建了一个数据库适配器。
我遇到的问题是输入EditText控件的条目的验证。 当我单击“注册”按钮时,信息应存储在数据库中,确保条目不为空,确认密码与密码匹配,最重要的是用户名尚未使用。我已经尝试过每一种方法都可以这样做,但要么我得到了运行时强制关闭错误,要么验证没有按照我想要的方式工作。
final EditText unedit = (EditText) findViewById(R.id.unedit);
final EditText passedit = (EditText) findViewById(R.id.passedit);
final EditText conpassedit = (EditText) findViewById(R.id.conpassedit);
final EditText nameedit = (EditText) findViewById(R.id.nameedit);
final EditText emailedit = (EditText) findViewById(R.id.emailedit);
final EditText mobedit = (EditText) findViewById(R.id.mobedit);
Button register = (Button) findViewById(R.id.registerbutton);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String username = unedit.getText().toString();
String password = passedit.getText().toString();
String conpassword = conpassedit.getText().toString();
String name = nameedit.getText().toString();
String email = emailedit.getText().toString();
String mobileno = mobedit.getText().toString();
RegDb reg = new RegDb(Register.this);
reg.open();
String returnedUn = reg.getUn(username);
reg.close();
if (username.isEmpty()) {
unedit.setError("Username is required");
// return;
}
if (password.isEmpty()) {
passedit.setError("Password is required");
// return;
}
if (conpassword.isEmpty()) {
conpassedit.setError("Password confirmation is required");
// return;
}
if (name.isEmpty()) {
nameedit.setError("Name is required");
// return;
}
if (email.isEmpty()) {
emailedit.setError("Email is required");
// return;
}
if (mobileno.isEmpty()) {
mobedit.setError("Mobile No is required");
// return;
}
if (username.equals(returnedUn)) {
unedit.setError("Username is already used");
// return;
}
if (!conpassword.equals(password)) {
passedit.setError("Check your password");
// return;
}
if (!username.isEmpty() && !password.isEmpty()
&& !name.isEmpty() && !email.isEmpty()
&& !mobileno.isEmpty() && conpassword.equals(password)
&& !username.equals(returnedUn)) {
Dialog d = new Dialog(v.getContext());
d.setTitle("Account created.");
d.show();
} else {
return;
}
我也使用了try-catch-finally,但验证似乎无法正常工作。
boolean created = true;
try {
if (!username.isEmpty() && !password.isEmpty()
&& !name.isEmpty() && !email.isEmpty()
&& !mobileno.isEmpty() && conpassword.equals(password)
&& !username.equals(returnedUn)){
RegDb entry = new RegDb(Register.this);
entry.open();
entry.createEntry(username, password, name, email,
mobileno);
entry.close();
}
} catch (Exception e) {
created=false;
Dialog d = new Dialog(v.getContext());
d.setTitle("Please check your entries.");
d.show();
} finally {
if (created) {
Dialog d = new Dialog(v.getContext());
d.setTitle("Account created.");
Intent i = new Intent(v.getContext(),
MainActivity.class);
startActivity(i);
}
}
请告诉我我做错了什么以及应该做些什么。
答案 0 :(得分:0)
首先,您不需要以这种方式声明final EditText unedit = (EditText) findViewById(R.id.unedit);
您可以在课程级别将其声明为
private EditText unedit;
现在onCreate()方法使用以下方式访问它,
unedit = (EditText) findViewById(R.id.unedit);
并检查字符串变量,如下所示,
String username = unedit.getText().toString().trim(); // Add Trim() method
if (username.equals("")) {
unedit.setError("Username is required");
// return;
}
所有其他人都一样。