gpt4 book ai didi

java - 共享偏好 boolean 值总是返回 false

转载 作者:行者123 更新时间:2023-12-01 18:09:38 25 4
gpt4 key购买 nike

我正在使用共享首选项。为什么这个方法总是返回 false ?(顺便说一句,此代码来自 tutorial )何时或如何返回 true?我想检查是否真的进入另一个 Activity

 public boolean isLoggedIn(){
return pref.getBoolean("login", false);
}

当我创建用户时,我添加 boolean 值 true

 public void createLoginSession(String name, String email){
// Storing login value as TRUE
Toast.makeText(_context, "Create", Toast.LENGTH_SHORT).show();
System.out.println("login1");
editor.putBoolean("login", true);

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

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

// commit changes
editor.commit();
}

此方法用于检查返回 islogin true 或 false,在这种情况下它始终为 false,如何修复它以返回它?

/**
* 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()){
Toast.makeText(_context, " Login", Toast.LENGTH_SHORT).show();

// user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, Register.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);
}
else {
Intent i = new Intent(_context, UserProfile.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);
}
}

session 管理器类

public class SessionManager {
// 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 = "AndroidHivePref";

// 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_NAME = "name";

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

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

/**
* Create login session
* */
public void createLoginSession(String name, String email){
// Storing login value as TRUE
Toast.makeText(_context, "Create", Toast.LENGTH_SHORT).show();
System.out.println("login1");
editor.putBoolean("login", true);

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

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

// 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
// editor.putBoolean("login", true);

if(!this.isLoggedIn()){
Toast.makeText(_context, " Login", Toast.LENGTH_SHORT).show();

// user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, Register.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);
}
else {
Intent i = new Intent(_context, UserProfile.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 name
user.put(KEY_NAME, pref.getString(KEY_NAME, null));

// user email id
user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));

// return user
return user;
}

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

// After logout redirect user to Loing 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);
}

/**
* Quick check for login
* **/
// Get Login State
public boolean isLoggedIn(){
return pref.getBoolean("login", false);
}
}

编辑

当我从光标中删除编辑器并将其添加到此处时,它起作用了

public void checkLogin(){
// Check login status
pref = PreferenceManager.getDefaultSharedPreferences(_context);
editor = pref.edit();

editor.putBoolean("login", true);

if(!this.isLoggedIn()){
Toast.makeText(_context, " Login", Toast.LENGTH_SHORT).show();

// user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, Register.class);
// Closing all the Activities
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

}

但是奇怪的是,如果我在这里添加,它就不起作用

public void createLoginSession(String name, String email){
// Storing login value as TRUE
Toast.makeText(_context, "Create", Toast.LENGTH_SHORT).show();
System.out.println("login1");
pref = PreferenceManager.getDefaultSharedPreferences(_context);
// pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
editor.putBoolean("login", true);
...

最佳答案

而不是

pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);

尝试

pref = PreferenceManager.getDefaultSharedPreferences(context);

这是我在调试器中的上下文 (ctx)。

enter image description here

以下是如何检查首选项文件以验证其是否匹配。我还在第三个屏幕截图中编写了不同的代码,以演示微小的差异如何改变首选项位置。

在第一个屏幕截图中,请注意调试器显示我正在写入的首选项文件的位置。 enter image description here

接下来,查看我正在读取的文件的位置以及如何初始化我的 pref 变量。我保存的首选项是正确的,就像我在上一个屏幕中保存它一样。 enter image description here

最后,我以不同的方式初始化了我的首选项。看到不同?我的 boolean 值现在为 false(默认),并且文件位置不同。 enter image description here

现在,也许您每次都设置相同的首选项。检查确定。几年前我就遇到过这个问题,它让我发疯,直到我意识到我使用了不同的首选项文件。我就是这样发现问题的。

最后,看看我尝试获取上下文的不同方法。看看调试器中的每一个有何不同?这可能不是你的问题,但是当你遇到奇怪的断开连接时,请仔细检查一下你是如何连接所有东西的。 enter image description here

我希望这会有所帮助...

关于java - 共享偏好 boolean 值总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com