这是我的登录选项的android代码。帮助我找出了问题所在。
我的DatabaseHelper类:
public String getAllData(String name) {
// TODO Auto-generated method stub
SQLiteDatabase db=this.getReadableDatabase();
//查询检索名称并传递
Cursor res = db.rawQuery("select User_Name,User_Pass from "+Table_Name, null);
String a,b;
b="not found";
if(res.moveToFirst()){
do{
a=res.getString(1);
//check name
if(a.equals(name)){
b=res.getString(3);
break;
}
}while(res.moveToNext());
}
//return corresponding password
return b;
}
我的活动课程:
public void showData(){
submitButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
name=userNameEditText.getText().toString();
password=passwordEditText.getText().toString();
String pass=myDb.getAllData(name);
//matching password
if(password.equals(pass)){
Intent intent=new Intent(UserActivity.this,Meal_Information_Activity.class);
startActivity(intent);
}
else{
Toast.makeText(getBaseContext(),"Password doesn't match", Toast.LENGTH_LONG).show();
}
}
});
}
答案 0 :(得分:1)
我相信您将用户的用户名传递给DB方法。在方法内部时,您将根据光标返回的user_password检查用户名。索引的游标对象将像数组一样工作 - 从0开始。当您说a=res.getString(1);
时,您将获得查询为每行选择的第二项,在您的情况下,是user_password
我还建议稍微更改一下查询,只从数据库中提取所需的信息,而不是所有记录。例如,您的用户将使用用户名和密码登录(您已经在onClick()中检索这些值),因此使用这两个元素来构造适当的查询。由于您同时拥有这两个值,因此如果您更改了DatabaseHelper.getAllData()(或创建了一个验证用户凭据的新方法)以接受这两个参数(用户名和密码),则可以构建查询以选择密码WHERE User_name = 'username'
通过这种方式,您将只返回数据库中的一行,而不是每一行。您可以先检查光标对象是否包含某些内容(如果它没有,这意味着用户名无效 - 或者至少不在您的数据库中),然后根据用户输入的内容检查它返回的密码
希望这有帮助!