只有一个用户可以通过Android SQLite输入登录



我已经创建了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();
            }
    }
}

正在使用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","");

获取主活动的用户名

请不要忘记更改与表相关的列名

您可以在"共享首选项"中指定用户名,并在登录时进行检查。

为简单起见,创建一个负责存储和加载字符串值的 Java 文件。

示例代码:

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;
    }
}

如果您已经知道要登录哪个用户,请将其设置为加载方法的默认值中的值。

String userName=mshared.getString("UserName","user u allow to login");

在你的主活动中,on创建初始化上面提到的类的对象。

SharedUsers SpUsers=new SharedUsers (MainActivity.this);

修改您的 if-else 条件:

     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
}

如果您不知道哪个用户将登录,请在使用您的意图登录时传递用户名。

当第一个用户登录并定向到 MainActivity 时,将用户名值存储在共享首选项中,在这种情况下,该值将是用户名,您需要通过 Intent 传递它

        SpUsers.setUser("user_name you want to allow login");

我希望这个安斯对你有帮助。

最新更新