2013-04-22 53 views
1

我希望当用户在我的应用程序中注册用户名时,如果用户名已被占用,他/她将得到一个表示“用户名已被占用”的敬酒。如何在注册活动中防止重复输入

我已经在我的数据库中包含了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")); 
       } 
      } 

     }); 

    } 

} 
+1

问题出在哪里? – stinepike 2013-04-22 03:01:42

+0

@StinePike使用我试图使用的方法时,我注册一个重复的用户名,它仍然作用于我的else语句重定向到登录活动时,我想第二if语句不去登录活动,并告诉用户用户名已经存在才能生效。我知道我使用的方法不正确(如果(Username.equals(TakenUsername))我发布了这个问题,询问什么才是正确的方法。 – Cranosaur 2013-04-22 03:06:29

+0

chech在数据库中用户名的可用性,I我认为这是更好的解决方案 – stinepike 2013-04-22 03:09:06

回答

2

你可以做到这一点

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

} 
+0

这工作完全谢谢你!我从昨晚解决了这个问题,谢谢你给我的BasAdapter例子! – Cranosaur 2013-04-22 03:41:54

+0

这太好了,我还在想如何findViewById返回null。 – 2013-04-22 03:44:11

+0

我有充气器作为r.id.listitems而不是r.id.adminlistitems完全忽略了一个大声笑 – Cranosaur 2013-04-22 03:52:38

0

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

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

以下

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