如何防止注册活动中的重复输入

时间:2013-04-22 02:58:21

标签: java android

我希望当用户在我的应用中注册用户名时,如果已经使用了该用户名,他/她将获得一个“用户名已被采用”的祝词。

我已经在我的数据库中包含了UNIQUE约束并且它工作正常但在活动本身我想让用户知道他们试图注册的用户名已经存在。

    package com.fullfrontalgames.numberfighter;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class Register extends Activity {
    EditText UsernameReg, PasswordReg, PasswordConfirm, EmailReg;

    Button Register;

    DBAdapter db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);

        // get Instance of Database Adapter
        final DBAdapter db = new DBAdapter(this);
        db.open();

        // Get reference of views.
        UsernameReg = (EditText)findViewById(R.id.UsernameReg);
        PasswordReg = (EditText)findViewById(R.id.PasswordReg);
        EmailReg = (EditText)findViewById(R.id.EmailReg);
        PasswordConfirm = (EditText)findViewById(R.id.PasswordConfirm);

        Register = (Button)findViewById(R.id.Register);
        Register.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String Username = UsernameReg.getText().toString();
                String Password = PasswordReg.getText().toString();
                String PassConfirm = PasswordConfirm.getText().toString();
                String Email = EmailReg.getText().toString();
                String TakenUsername = db.getData();

                // Check if any of the field are vacant.
                if (Username.equals("") || Password.equals("") || PassConfirm.equals("")) {
                    Toast.makeText(getApplicationContext(), "Field Vacant", Toast.LENGTH_LONG)
                            .show();
                    return;
                }
                // Check if both passwords matches
                if (!Password.equals(PassConfirm)) {
                    Toast.makeText(getApplicationContext(), "Password does not match",
                            Toast.LENGTH_LONG).show();
                    return;
                }
                if (Username.equals(TakenUsername))

                {
                    Toast.makeText(getApplicationContext(), "Username Already Taken",
                            Toast.LENGTH_LONG).show();
                    return;
                } else {
                    // Save data in database
                    db.insertPlayer(Username, Password, Email);
                    Toast.makeText(getApplicationContext(), "Account Successfully Created ",
                            Toast.LENGTH_LONG).show();
                    startActivity(new Intent("com.fullfrontalgames.numberfighter.Login"));
                }
            }

        });

    }

}

2 个答案:

答案 0 :(得分:2)

而不是

if (Username.equals(TakenUsername))

            {
                Toast.makeText(getApplicationContext(), "Username Already Taken",
                        Toast.LENGTH_LONG).show();
                return;
            } else {
                // Save data in database
                db.insertPlayer(Username, Password, Email);
                Toast.makeText(getApplicationContext(), "Account Successfully Created ",
                        Toast.LENGTH_LONG).show();
                startActivity(new Intent("com.fullfrontalgames.numberfighter.Login"));
            }  

你可以这样做

long id = db.insertPlayer(Username, Password, Email);
if (id == -1)
{
    Toast.makeText(getApplicationContext(), "Username Already Taken",
                        Toast.LENGTH_LONG).show();
}  

其中

public long insertPlayer(String Username, String Password, String Email)
{
    ContentValues values = new ContentValues();
    values.put("USERNAME", Username);
    values.put("PASSWORD", Password);
    values.put("EMAIL", Email);

    return db.insertWithOnConflict(Table name, null, values, SQLiteDatabase.CONFLICT_IGNORE);  

}

答案 1 :(得分:0)

检查数据库表是否存在用户名。你可以做以下

Cursor c = db.query(TABLE_NAME, new String[] { USERNAME},
        USERNAME+ " ='" + userName + "'", null, null, null, null);
        if(c.getCount > 0)
               username taken;;