我已经创建了3个用户帐户,但是只有第一个帐户才能登录到系统。如果我输入第二和第三用户名以及密码错误,则显示用户名或密码错误。我不知道为什么这是我的代码
public void login()
{
String user = ed1.getText().toString();
String pass = ed2.getText().toString();
SQLiteDatabase db = openOrCreateDatabase("pos", Context.MODE_PRIVATE, null);
Cursor resultSet = db.rawQuery("select * from user ",null);
resultSet.moveToFirst();
String username = resultSet.getString(1);
String password = resultSet.getString(2);
SharedPreferences.Editor sp = getSharedPreferences(username, MODE_PRIVATE).edit();
sp.putString("uname", username);
if (user.equals("") && pass.equals("")) {
Toast.makeText(this, "Username or Password blank", Toast.LENGTH_LONG).show();
}
else if (user.equals(username) && pass.equals(password))
{
Intent i = new Intent(login.this, MainActivity.class);
i.putExtra("uname", username);
startActivity(i);
}
else {
Toast.makeText(this, "Username or Password not match", Toast.LENGTH_LONG).show();
ed1.setText("");
ed2.setText("");
ed1.requestFocus();
}
}
}
答案 0 :(得分:0)
您正在使用moveToFirst()
方法,该方法从您请求的查询中返回表中的第一个非空行。您将从当前查询中获取所有行。
下面是完成与任何用户登录的步骤。
public void login()
{
String user = ed1.getText().toString();
String pass = ed2.getText().toString();
if (user.equals("") || pass.equals("")) {
Toast.makeText(this, "Username or Password blank", Toast.LENGTH_LONG).show();
}
else if (null!=checkUser(user,pass))
{
String userFromDb=checkUser(user,pass);
Intent i = new Intent(login.this, MainActivity.class);
i.putExtra("uname", userFromDb);
startActivity(i);
}
else {
Toast.makeText(this, "Username or Password not match", Toast.LENGTH_LONG).show();
ed1.setText("");
ed2.setText("");
ed1.requestFocus();
}
}
public String checkUser(String name, String pass)
{
SQLiteDatabase db=this.getReadableDatabase();
Cursor cursor=db.rawQuery("SELECT id FROM user WHERE name=? AND password=?",new String[]{name,pass});
if(cursor.getCount()>0) {
cursor.moveToFirst();
String username = cursor.getString(1);
String password = cursor.getString(2);
SharedPreferences.Editor sp = getSharedPreferences("username", MODE_PRIVATE).edit();
sp.putString("uname", username);
sp.apply();
cursor.close();
return username;
}
return null;
}
使用
String userName = getSharedPreferences("username",MODE_PRIVATE).getString("uname","");
获取主要活动的用户名
请不要忘记更改表的列名
答案 1 :(得分:0)
您可以在“共享首选项”中指定用户名,并在登录时进行检查。
为简单起见,创建一个Java文件来负责存储和加载字符串值。
示例代码:
eb
如果您已经知道要登录的用户,然后将其设置为 加载方法默认值中的值。
public class SharedUsers {
SharedPreferences mshared;
public SharedUsers(Context context) {
mshared=context.getSharedPreferences("filename",Context.MODE_PRIVATE);
}
public void setUser(String name){
SharedPreferences.Editor editor =mshared.edit();
editor.putString("UserName",name);
editor.commit();
}
public String loadUser(){
String userName=mshared.getString("UserName","defaultUSerName");
return userName;
}
}
在您的MainActivity内部,上述类的onCreate Initialize对象。
String userName=mshared.getString("UserName","user u allow to login");
修改if-else条件:
SharedUsers SpUsers=new SharedUsers (MainActivity.this);
如果您不知道将登录哪个用户,则在使用Intent登录时传递用户名。
首次用户登录并定向到MainActivity时,将用户名值存储在共享首选项中,在这种情况下,该值为UserName,即U,需要将其通过Intent传递
else if (user.equals(username) && pass.equals(password))
{
if(SpUsers.loadUser.contains("value which u write in load method of SharedPreference class"){
Intent i = new Intent(login.this, MainActivity.class);
i.putExtra("uname", username);
startActivity(i);
}
}else {
//handle however u like
}
我希望这对您有帮助。