0

我正在尝试制作 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);

                }
            }

请告诉我我做错了什么以及应该做什么。

4

1 回答 1

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;
            }

其他所有相同。

于 2013-03-29T12:42:33.667 回答