2017-01-10 2 views
-1

Мне нужно ввести имя пользователя & пароль в edittext & хранить их в базе данных при нажатии кнопки. Они сохраняются только в том случае, если в любой другой записи нет одинакового имени пользователя. Это приводит к сбою приложенияКак сделать запись в приложении приложения Android только в том случае, если она еще не существует, показывая Toast или Message?

public void updateDB(){ 
    username = editTextUser.getText().toString(); 
    password = editTextPassword.getText().toString(); 
    cursor = db.rawQuery("select * from " +UserDatabase.TABLE1+" where"+UserDatabase.USERNAME+" ='" +username+ "'",null); 
    if (cursor.getCount()==0) { 
     values.put(UserDatabase.USERNAME,username); 
     values.put(UserDatabase.PASSWORD,password); 
     try { 
      db.insert(UserDatabase.TABLE1, null, values); 
      Toast.makeText(this,"Registered", Toast.LENGTH_SHORT).show(); 
      Log.d("SignUpActivity", username + " " + password); 
     } catch (SQLiteException e) { 
      e.printStackTrace(); 
     } 
    } else { 
     Toast.makeText(this,"Username NA", Toast.LENGTH_SHORT).show(); 
    } 
} 
+4

Добро пожаловать к переполнению стека! Сначала вы можете взять [тур] (http://stackoverflow.com/tour) и узнать [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) и создать [ Minimal, Complete и Verifiable] (http://stackoverflow.com/help/mcve). Нам будет легче помочь вам. –

+3

Я обожаю хороший вопрос. Это не одно. –

ответ

-1

Используйте этот метод для проверки того, что пользователь уже существует или нет.

// For UserName[Person] Already Exist 
    public String ExistsValidation(String PersonName) { 
     String PName = ""; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     try { 

      Cursor cursor = db.query(TABLE_NAME, null, PERSON_NAME + "=?", new String[]{String.valueOf(PersonName).trim()}, null, null, null); 
      if (cursor == null) { 
       return PName; 
      } else { 
       cursor.moveToFirst(); 
       PName = cursor.getString(cursor.getColumnIndex("PersonName")); 
      } 
      cursor.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
     db.close(); 
     return PName; 
    } 

Использование выше метод, как:

String PersonName = etPersonName.getText().toString().trim(); 
    String storedPersonName = db.ExistsValidation(PersonName); 

    // if PersonName Exists 
    if (PersonName.equals(storedPersonName)) { 
     ShowAlertDialog("Error..!", "PersonName Already Exists,Enter Another Name"); 
     return false; 
    } 
+0

, и вам нужно только проверить имя пользователя уже не для пароля ... Поскольку пароль должен совпадать для одного или нескольких пользователей –

+0

Вы проверили 'курсор == null'? Курсор не будет пустым, если нет возвращенных строк. Вместо этого вы должны проверить счетчик. например '(cursor.getCount() == 0)' или '(cursor.getCount() <1)' – MikeT

+0

Да @MikeT .... вы в правильном направлении ... но этот код работает для меня ... Tnx –

-1

вы можете использовать insertOrThrow() метод вместо этого, просто положить уникальное ключевое слово, прежде чем имя пользователя в таблице и ввести новый

catch with(SQLException e){} 

в этом вы можете toast вы messsage

+0

Это всегда исключение. Тел точно, где я ставлю УНИКАЛЬНО? – Sooraj

+0

добавьте UNIQUE, где вы пишете, создаете таблицу статусов для своей базы данных, добавьте это ключевое слово до имени пользователя , например. 'create table user, если не существует (имя пользователя UNIQUE varchar, ....)' – pkgrover