2016-03-06 62 views
-2

我正在做android應用程序開發和登錄模塊工作現在我正在嘗試註冊,如果用戶名已存在,則顯示用戶名已存在並且用戶應該登錄的消息。註冊並登錄無法正常工作

我的代碼 //註冊

public void addButtonClicked(View view) { 
    LogIn ln = new LogIn(username.getText().toString(), password.getText().toString()); 

    dbHandler.addUser(ln); 
    printDatabase(); 
    Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show(); 
    boolean r = dbHandler.CheckIsDataAlreadyInDBorNot(username.getText().toString()); 
    if (r) { 
     Toast.makeText(this, "Username already exists", Toast.LENGTH_LONG).show(); 
    } 
} 

//用於登錄,登錄就應該移動到下一個活動,但它不工作

public void buttonClicked() { 
    boolean h = dbHandler.CheckIsDataAlreadyInDBorNot(username.getText().toString()); 
    if (h) { 

     Intent i = new Intent(getApplicationContext(), third.class); 
     startActivity(i); 
    } 

} 

// DB後處理程序代碼

 public boolean CheckIsDataAlreadyInDBorNot(String fieldValue) { 
     SQLiteDatabase db = getWritableDatabase(); 
     String Query = "Select * from " + TABLE_LOGIN + " where " + COLUMN_USERNAME + " = " + fieldValue; 
     Cursor cursor = db.rawQuery(Query, null); 
     if(cursor.getCount() == 0){ 
      cursor.close(); 

      return false; 
     } 
     cursor.close(); 
     return true; 
    } 

登錄分類信息

public class LogIn { 
private int _id; 
private String _username; 
private String _password; 

public LogIn(){ 
} 

public LogIn(String username,String password){ 
    this._username = username; 
    this._password = password; 

} 

public void set_id(int _id) { 
    this._id = _id; 
} 


public void set_password(String _password) { 
    this._password = _password; 
} 

public int get_id() { 

    return _id; 
} 

public String get_username() { 
    return _username; 
} 

public String get_password() { 
    return _password; 
} 

public void set_username(String _username) { 

    this._username = _username; 
} 

}

+0

請提供登錄類的細節。 – HoseinIT

+0

您將用戶添加到數據庫,然後檢查它是否在那裏,並想知道它爲什麼在那裏? – Henry

+0

「它不工作」究竟意味着什麼? – Henry

回答

0

我會盡量建議/糾正我認爲這是造成問題, 發佈您的logcat領域或任何錯誤都將幫助更多...

1- addButton的邏輯:

你應該檢查用戶是否已經存在,並根據這個動作 當前你插入一條記錄,然後檢查它是否存在,因此r將永遠是true

變化的方法如下:我想雖然我認爲你應該使用query()

A.你有方法CheckIsDataAlreadyInDBorNot() 在SQL查詢錯誤

public void addButtonClicked(View view) { 

    boolean r = dbHandler.CheckIsDataAlreadyInDBorNot(username.getText().toString()); 
    if (r) { 
     Toast.makeText(this, "Username already exists", Toast.LENGTH_LONG).show(); 
     return; 
    }else{ 
     LogIn ln = new LogIn(username.getText().toString(), password.getText().toString()); 

     dbHandler.addUser(ln); 
     printDatabase(); 
     Toast.makeText(this, "Saved", Toast.LENGTH_LONG).show(); 
    } 
} 

2-修復當前代碼:您遺漏了包含該值的單個問題(因爲它是字符串)where userName='Smith'

public boolean CheckIsDataAlreadyInDBorNot(String fieldValue) { 
    SQLiteDatabase db = getWritableDatabase(); 
    String Query = "Select * from " + TABLE_LOGIN + " where " + COLUMN_USERNAME + " = '" + fieldValue + "'"; 
    Cursor cursor = db.rawQuery(Query, null); 
    if(cursor.getCount() == 0){ 
     cursor.close(); 

     return false; 
    } 
    cursor.close(); 
    return true; 
} 

B.使用query()

public boolean CheckIsDataAlreadyInDBorNot(String fieldValue) { 
    SQLiteDatabase db = getWritableDatabase(); 
    Cursor cursor = db.query(TABLE_LOGIN, null, COLUMN_USERNAME+"=?", new String[]{fieldValue}, null, null, null); 
    if(cursor.getCount() == 0){ 
     cursor.close(); 
     return false; 
    } 
    cursor.close(); 
    return true; 
} 
+0

實際上,在運行代碼時沒有錯誤或異常,但是當我單擊其中一個登錄或註冊按鈕時,它顯示應用程序已停止工作.i已經注意到它是由於我正在使用的語句導致的。可能的其他解 – ishaarora95

+0

當你得到這個消息(應用程序已經停止)時,必須有一個異常,並且異常有一個'stackTrace',這個stackTrace可以在logcat中找到,你需要在這裏得到它,所以我們可以找出問題所在,其他比它會很難猜測... – Yazan