2013-04-22 5 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

+0

@StinePike С помощью метода, который я пытаюсь использовать, когда я регистрирую дублирующее имя пользователя, он по-прежнему действует в моей инструкции else для перенаправления на активность входа, когда я хочу, чтобы оператор 2-го if не переходил на активность входа и сообщал пользователю Имя пользователя уже существует, чтобы вступить в силу вместо этого. Я знаю, что неправильно использую метод (If (Username.equals (TakenUsername) Я разместил этот вопрос, чтобы спросить, каким будет правильный метод. – Cranosaur

+0

chech availablility имени пользователя в базе данных, I подумайте, что это лучшее решение. – stinepike

ответ

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

} 
+0

Это отлично сработало! Кстати, я исправил проблему с прошлой ночи благодаря примеру BasAdapter, который вы мне дали! – Cranosaur

+0

Это здорово, мне все еще интересно, как findViewById возвращает значение null. –

+0

У меня был надув, как r.id.listitems, а не r.id.adminlistitems, полностью упустил из виду, что один lol – Cranosaur

0

проверьте свою таблицу базы данных, если имя пользователя существует. вы можете сделать следующее

Cursor c = db.query(TABLE_NAME, new String[] { USERNAME}, 
     USERNAME+ " ='" + userName + "'", null, null, null, null); 
     if(c.getCount > 0) 
       username taken;; 
Смежные вопросы