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

时间:2019-04-25 04:54:05

标签: android

我已经创建了3个用户帐户,但是只有第一个帐户才能登录到系统。如果我输入第二和第三用户名以及密码错误,则显示用户名或密码错误。我不知道为什么这是我的代码

enter image description here

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

}

2 个答案:

答案 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
}

我希望这对您有帮助。