我正在进行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 handler code
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 :(得分:0)
我会尝试建议/纠正我认为导致问题的区域, 发布您的logcat或任何错误将有助于更多...
1- addButton的逻辑:
您应该检查用户是否已经存在,并根据此行动
目前您正在插入记录,然后检查它是否存在,
因此r
始终为true
!
更改方法如下:
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-我认为你在方法CheckIsDataAlreadyInDBorNot()
的sql-query中有错误
虽然我认为你应该使用 query()
A。修复当前代码:您缺少包装值的单个状态(因为它是字符串)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;
}