Java 一次性登录

Java 一次性登录,java,android,login,Java,Android,Login,我正在创建一个项目,其中有一个登录屏幕,用于用户登录到 应用此登录屏幕应仅在第一次时可见,以便用户可以填写并登录,但当用户在第二次打开应用程序时,应用程序必须显示main.activity。如何使用共享首选项执行此操作?首先,检查用户是否在之前登录。使用SharedReference: SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); Boolean loggedIn =

我正在创建一个项目,其中有一个登录屏幕,用于用户登录到
应用此登录屏幕应仅在第一次时可见,以便用户可以填写并登录,但当用户在第二次打开应用程序时,应用程序必须显示main.activity。如何使用共享首选项执行此操作?

首先,检查用户是否在之前登录。使用SharedReference:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Boolean loggedIn = prefs.getBoolean("loggedIn", false);
if(loggedIn != null && loggedIn)
{
    //open main activity
}else{
    //open login page
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.edit().putBoolean("loggedIn", true);
当用户登录时,将登录信息保存到SharedReferences:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
Boolean loggedIn = prefs.getBoolean("loggedIn", false);
if(loggedIn != null && loggedIn)
{
    //open main activity
}else{
    //open login page
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.edit().putBoolean("loggedIn", true);

这就是您所需要的。

如果您希望在用户登录到应用程序共享首选项时使用共享首选项执行此操作

SharedPreferences prefs = getSharedPreferences("MyApp", MODE_PRIVATE);
prefs.edit().putBoolean("staylogin", true).commit();
SharedPreferences prefs = getSharedPreferences("MyApp", MODE_PRIVATE);
prefs.edit().putBoolean("staylogin", false).commit();
如果您想注销buton,请单击设置首选项

SharedPreferences prefs = getSharedPreferences("MyApp", MODE_PRIVATE);
prefs.edit().putBoolean("staylogin", true).commit();
SharedPreferences prefs = getSharedPreferences("MyApp", MODE_PRIVATE);
prefs.edit().putBoolean("staylogin", false).commit();
为了在不登录屏幕的情况下启动你的应用程序,你可以先使用启动屏幕,然后再检查共享首选项

SharedPreferences prefs = getSharedPreferences("MyApp", MODE_PRIVATE);
Boolean state = prefs.getString("staylogin", false);

if (state) {

//Start Main Activity

} else {

//Start Log in activity

}

试试这个,工作代码

在您的登录页面中

    // Session Manager Class
        SessionManagerFor_Signin session;

    private EditText EMAIL, PASSWORD;
        private Button login;

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);

            setContentView(R.layout.sign_in);

            // Session Manager
            session = new SessionManagerFor_Signin(getApplicationContext());

    login = (Button) findViewById(R.id.loginbutton);

            EMAIL = (EditText) findViewById(R.id.EmaileditText1);
            PASSWORD = (EditText) findViewById(R.id.passwordeditText2);

    login.setOnClickListener(this);


    }
    @Override
        public void onClick(View v) {

            switch (v.getId()) {
    case R.id.loginbutton:

    email = EMAIL.getText().toString();
    password = PASSWORD.getText().toString();

if (email.equals("") || password.equals(""))
            {
                // user didn't entered user name or password
                // Show alert asking him to enter the details
                alert.showAlertDialog(sign_in.this, "Login Failed...","Please Enter Email and Password", false);

            } 

            else
            {

                // fetch the Password form database for respective Email
                storedPassword = DB.getSinlgeEntry(email);

                if (password.equals(storedPassword)) 
                {

    session.createLoginSession(email, password);
    Toast.makeText(sign_in.this, "Login Successfull",Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(sign_in.this, Page1_Landing.class);
                        startActivity(intent);
                        finish();
}
}
    break;
    }
sessionmanager for_sign.java

public class SessionManagerFor_Signin 
{
    // Shared Preferences
    SharedPreferences pref;

    // Editor for Shared preferences
    Editor editor;

    // Context
    Context _context;

    // Shared pref mode
    int PRIVATE_MODE = 0;

    // Sharedpref file name
    private static final String PREF_NAME = "SharedPref";

    // All Shared Preferences Keys
    private static final String IS_LOGIN = "IsLoggedIn";

    // User name (make variable public to access from outside)
    public static final String KEY_EMAILID = "email";

    // Email address (make variable public to access from outside)
    public static final String KEY_PASSWORD = "password";

    // Constructor
    public SessionManagerFor_Signin(Context context)
    {
        this._context = context;
        pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
        editor = pref.edit();

    }


     // Create login session

    public void createLoginSession(String email, String password)
    {
        // Storing login value as TRUE
        editor.putBoolean(IS_LOGIN, true);

        // Storing name in pref
        editor.putString(KEY_EMAILID, email);

        // Storing email in pref
        editor.putString(KEY_PASSWORD, password);

        // commit changes
        editor.commit();
    }   

    /**
     * Check login method wil check user login status
     * If false it will redirect user to login page
     * Else won't do anything
     * */
    public void checkLogin()
    {
        // Check login status

        if(this.isLoggedIn())
        {
            Intent intent = new Intent(_context,Page1_Landing.class);
            // Closing all the Activities
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            // Add new Flag to start new Activity
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //Toast.makeText(getApplicationContext(),email, Toast.LENGTH_LONG).show();
            _context.startActivity(intent);
        }
        else
        {
            // user is not logged in redirect him to Login Activity
            Intent i = new Intent(_context, MainActivity.class);
            // Closing all the Activities
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

            // Add new Flag to start new Activity
            i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            // Staring Login Activity
            _context.startActivity(i);
        }

    }



    /**
     * Get stored session data
     * */
    public HashMap<String, String> getUserDetails(){
        HashMap<String, String> user = new HashMap<String, String>();
        // user mail
        user.put(KEY_EMAILID, pref.getString(KEY_EMAILID, null));

        // user password
        user.put(KEY_PASSWORD, pref.getString(KEY_PASSWORD, null));

        // return user
        return user;
    }

    /**
     * Clear session details
     * */
    public void logoutUser()
    {
        // Clearing all data from Shared Preferences
        editor.clear();
        editor.commit();



        Intent intent = new Intent(_context,  MainActivity.class);

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

        _context.startActivity(intent);
    }

    /**
     * Quick check for login
     * **/
    // Get Login State
    public boolean isLoggedIn()
    {
        return pref.getBoolean(IS_LOGIN, false);
    }
}
public class sessionmanager供登录
{
//共享首选项
共享参考优先;
//共享首选项编辑器
编辑;
//上下文
语境(Context)语境;;
//共享优先模式
int PRIVATE_MODE=0;
//Sharedpref文件名
私有静态最终字符串PREF_NAME=“SharedPref”;
//所有共享首选项密钥
私有静态最终字符串是\u LOGIN=“IsLoggedIn”;
//用户名(将变量公开以便从外部访问)
公共静态最终字符串键\u EMAILID=“email”;
//电子邮件地址(将变量公开以便从外部访问)
公共静态最终字符串密钥\u PASSWORD=“PASSWORD”;
//建造师
公共会话管理器用于登录(上下文)
{
这._context=context;
pref=\u context.getSharedReferences(pref\u名称,PRIVATE\u模式);
编辑器=pref.edit();
}
//创建登录会话
public void createLoginSession(字符串电子邮件、字符串密码)
{
//将登录值存储为TRUE
putBoolean(IS_LOGIN,true);
//在pref中存储名称
编辑器.putString(KEY_EMAILID,email);
//在pref中存储电子邮件
编辑器.putString(KEY_密码,PASSWORD);
//提交更改
commit();
}   
/**
*检查登录方法将检查用户登录状态
*如果为false,它将用户重定向到登录页面
*否则我什么也做不了
* */
公共void checkLogin()
{
//检查登录状态
if(this.isLoggedIn())
{
意向意向=新意向(\u上下文,第1页\u Landing.class);
//结束所有活动
intent.addFlags(intent.FLAG\u ACTIVITY\u CLEAR\u TOP);
//添加新标志以启动新活动
intent.setFlags(intent.FLAG\u活动\u新任务);
//Toast.makeText(getApplicationContext(),email,Toast.LENGTH_LONG.show();
_背景。开始触觉(意图);
}
其他的
{
//用户未登录将其重定向到登录活动
意向i=新意向(_上下文,MainActivity.class);
//结束所有活动
i、 添加标志(意图、标志、活动、清除、顶部);
//添加新标志以启动新活动
i、 设置标志(意图、标志、活动、新任务);
//启动登录活动
_背景。起始触觉(i);
}
}
/**
*获取存储的会话数据
* */
公共HashMap getUserDetails(){
HashMap用户=新建HashMap();
//用户邮件
put(KEY_EMAILID,pref.getString(KEY_EMAILID,null));
//用户密码
user.put(KEY_PASSWORD,pref.getString(KEY_PASSWORD,null));
//返回用户
返回用户;
}
/**
*清除会话详细信息
* */
public void logoutUser()
{
//清除共享首选项中的所有数据
编辑器.clear();
commit();
意向意向=新意向(_上下文,MainActivity.class);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);
_背景。开始触觉(意图);
}
/**
*快速检查登录
* **/
//获取登录状态
公共布尔值isLoggedIn()
{
返回pref.getBoolean(是\u登录,false);
}
}
进一步你想要参考找到下面的链接


在SharedReference中保存用户的登录信息:

SharedPreferences preferences = getSharedPreferences("preference",MODE_PRIVATE);
preferences.edit().putBoolean("LoggedIn", true).apply();
并在用户注销时将布尔值“LoggedIn”保存为false:

preferences.edit().putBoolean("LoggedIn", false).apply();
在SplashActivity中,从SharedReference获取值并调用相应的Activity:

boolean loggedIn =  preferences.getBoolean("LoggedIn", false);

if(loggedIn){
// call main activity
}else{
//call login activity
}

使用这个链接,演示一下(getActivity())显示了什么error@Rushabh042您试图在哪个类中编写此代码?您是在活动中还是在片段中?@Rushabh042如果您在活动中,您可以使用PreferenceManager.GetDefaultSharedReferences(getApplicationContext());我在启动屏幕中编写上面的代码,下面的代码在我的方法@bigOare you there中@Bigow这段代码有什么错误?down Voted如何使用checkLogin()、logoutUser()、isLoggedIn()@Manoits在应用程序关闭和打开时不起作用。它会打开重新登录页面@Manoits成功后,您必须在登录按钮中添加此行。请填写session.createLoginSession(电子邮件,密码);然后,它将仅在我的应用程序中使用此代码保存状态IAM,注销选项您只需保留在应用程序中的某些位置它如何工作@madhuri hr即使在应用程序关闭和打开时,也会保存用户登录状态。因此,您可以在应用程序打开时调用相应的活动@RUSHABH042非常感谢您的帮助。@madhuri H Rit在(状态==0)处显示错误。为什么@Nikos Mitropoulosys我犯了一个错误,因为我使用prefs.getString(“staylogin”,“UNKNOWN”)并将其放在int值中…我编辑我的答案..谢谢你的评论。为什么我总是在你的代码中使用状态1@Nikos Mitropoulo您确定在用户