Android SQLite: cursor.getcount() 总是返回大于 0



我正在研究基本的注册和登录活动,我创建了两个活动登录和注册。注册活动工作正常(我猜),但在登录活动中,即使输入了错误的电子邮件和密码,它也始终允许用户成功登录。

我的数据库适配器

public class myDbAdapter extends SQLiteOpenHelper {
private static final int DATABASE_VERSION=1;
private static final String DATABASE_NAME="UserManager";
private static final String TABLE_NAME="UserData";
private static final String KEY_ID = "id";
private static final String EMAIL = "email";
private static final String PASSWORD = "password";

public myDbAdapter(Context context) {
super(context, DATABASE_NAME,null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + EMAIL + " TEXT,"
+ PASSWORD + " TEXT" + ")";
sqLiteDatabase.execSQL(CREATE_USER_TABLE);
System.out.println("Table created here");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(sqLiteDatabase);
}
//Add register data inside table
public void addDetails(String em,String pass)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(EMAIL,em);
values.put(PASSWORD,em);
db.insert(TABLE_NAME,null,values);
db.close();
}
public boolean checkUser(String e1, String p1) {
String[] columns = {
KEY_ID
};
SQLiteDatabase db = this.getReadableDatabase();
// selection criteria
String selection = EMAIL + " = ?" + " AND " + PASSWORD + " = ?";
// selection arguments
String[] selectionArgs = {e1, p1};
// query user table with conditions
/**
* Here query function is used to fetch records from user table this function works like we use sql query.
* SQL query equivalent to this query function is
* SELECT user_id FROM user WHERE user_email = 'jack@androidtutorialshub.com' AND user_password = 'qwerty';
*/
Cursor cursor = db.query(TABLE_NAME, //Table to query
columns,                    //columns to return
selection,                  //columns for the WHERE clause
selectionArgs,              //The values for the WHERE clause
null,                       //group the rows
null,                       //filter by row groups
null);                      //The sort order
int cursorCount = cursor.getCount();
cursor.close();
db.close();
if (cursorCount > 0) {
return true;
}
return false;
}
}

登录

public class Login extends Activity {
myDbAdapter ob =new myDbAdapter(this);
String k,k1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
EditText ed= (EditText) findViewById(R.id.Lee);
EditText ed1= (EditText) findViewById(R.id.Lep);
Button bn1=(Button)findViewById(R.id.buttonL);
k=ed.getText().toString();
k1=ed1.getText().toString();
bn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(ob.checkUser(k,k1))
{
Toast.makeText(Login.this, "Login Successfully", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Login.this, "Login Failed", Toast.LENGTH_SHORT).show();
}
}
});

}
}

注册

public class Register extends Activity{
myDbAdapter ob =new myDbAdapter(this);
String s,s1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
EditText edm= (EditText) findViewById(R.id.editE);
EditText edp= (EditText) findViewById(R.id.editP);
s=edm.getText().toString();
s1=edp.getText().toString();
Button bn=(Button)findViewById(R.id.RegiB);
bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ob.addDetails(s,s1);
Toast.makeText(Register.this, "Registered Successfully", Toast.LENGTH_SHORT).show();
}
});
}
}

在"登录"活动中,Toast 文本始终为"登录成功"。我正在尝试使用用户查核函数查找表中是否已存在电子邮件和密码,该函数始终返回 true,cursor.getcount()>0总是 有什么帮助吗?

为了可靠性起见,请考虑使用cursor.moveToFirst()来查找游标是否与cursor.getCount()一起为空。

if (null != cursor && cursor.moveToFirst() && cursor.getCount() > 0 ) {
// doSomething
} else {
// doOtherThing()
}

使用以下代码更改代码。您正在存储空白并使用空白进行查询,这就是您获得columnCount()>0的原因

登录

public class Login extends Activity {
myDbAdapter ob =new myDbAdapter(this);
String k,k1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
EditText ed= (EditText) findViewById(R.id.Lee);
EditText ed1= (EditText) findViewById(R.id.Lep);
Button bn1=(Button)findViewById(R.id.buttonL);
bn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
k=ed.getText().toString();
k1=ed1.getText().toString();
if(ob.checkUser(k,k1))
{
Toast.makeText(Login.this, "Login Successfully", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Login.this, "Login Failed", Toast.LENGTH_SHORT).show();
}
}
});
}
}

注册

public class Register extends Activity{
myDbAdapter ob =new myDbAdapter(this);
String s,s1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
EditText edm= (EditText) findViewById(R.id.editE);
EditText edp= (EditText) findViewById(R.id.editP);
Button bn=(Button)findViewById(R.id.RegiB);
bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
s=edm.getText().toString();
s1=edp.getText().toString();
ob.addDetails(s,s1);
Toast.makeText(Register.this, "Registered Successfully", Toast.LENGTH_SHORT).show();
}
});
}
}

你必须这样尝试

登录部分

EditText ed= (EditText) findViewById(R.id.Lee);
EditText ed1= (EditText) findViewById(R.id.Lep);
Button bn1=(Button)findViewById(R.id.buttonL);
bn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
k=ed.getText().toString();
k1=ed1.getText().toString();
if(ob.checkUser(k,k1))
{
Toast.makeText(Login.this, "Login Successfully", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Login.this, "Login Failed", Toast.LENGTH_SHORT).show();
}
}
});

注册部件

Button bn=(Button)findViewById(R.id.RegiB);
bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
s=edm.getText().toString();
s1=edp.getText().toString();
ob.addDetails(s,s1);
Toast.makeText(Register.this, "Registered Successfully", Toast.LENGTH_SHORT).show();
}
});

从编辑文本中读取文本,初始化时不单击,因为它将始终为空

注册

Button bn=(Button)findViewById(R.id.RegiB);
bn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
s=edm.getText().toString();
s1=edp.getText().toString();
ob.addDetails(s,s1);
Toast.makeText(Register.this, "Registered Successfully", Toast.LENGTH_SHORT).show();
}
});

登录

bn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
k=ed.getText().toString();
k1=ed1.getText().toString();
if(ob.checkUser(k,k1))
{
Toast.makeText(Login.this, "Login Successfully", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(Login.this, "Login Failed", Toast.LENGTH_SHORT).show();
}
}
});

最新更新