我需要保存用户会话,我的应用程序连接到WebService ,我试图实现SharedPreferences来创建一个“会话”,但它没有奏效。如果有人可以指导我或有更好的主意。
他验证数据后我保存用户名和密码Asynctask
if(result.equalsIgnoreCase("true"))
{
final String usuario = editusuario.getText().toString();
final String clave= editpass.getText().toString();
Toast.makeText(getApplicationContext(),"Bienvenido: "+usuario,Toast.LENGTH_SHORT).show();
session.createLoginSession(usuario,clave ); // aqui intento guerdar los datos para sesión
Intent intent = new Intent(MainActivity.this,cronometro.class);
startActivity(intent);
MainActivity.this.finish();
我在包含的类中引用Asyntask
session = new SessionManager(getApplicationContext());
课程SessionManager
是:
public class SessionManager {
SharedPreferences pref;
SharedPreferences.Editor editor;
Context _context;
int PRIVATE_MODE = 0;
private static final String PREF_NAME = "reg";
private static final String IS_LOGIN = "IsLoggedIn";
public static final String KEY_NAME = "Name";
public static final String KEY_EMAIL = "Email";
public SessionManager(Context context){
this._context = context;
pref = _context.getSharedPreferences(PREF_NAME, PRIVATE_MODE);
editor = pref.edit();
}
public void createLoginSession(String Name, String Email){
editor.putBoolean(IS_LOGIN, true);
editor.putString(KEY_NAME, Name);
editor.putString(KEY_EMAIL, Email);
editor.commit();
}
public void checkLogin(){
if(!this.isLoggedIn()){
Intent i = new Intent(_context, cronometro.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}
}
public HashMap<String, String> getUserDetails(){
HashMap<String, String> user = new HashMap<String, String>();
user.put(KEY_NAME, pref.getString(KEY_NAME, null));
user.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null));
return user;
}
public void logoutUser(){
editor.clear();
editor.commit();
Intent i = new Intent(_context, MainActivity.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
_context.startActivity(i);
}
public boolean isLoggedIn(){
return pref.getBoolean(IS_LOGIN, false);
}
}
问题是当我传递服务器的用户名和密码时,它可以比较保存的用户名和密码。
注意:我已经改变了解决问题的方法,我已经在答案会话中添加了一个可能的解决方案
我找到了解决方案,我以更简单的方式解决了这个问题,如果其他用户需要它,我会在此处给出答案。我想强调任何安全性或代码改进都是受欢迎的。
首先,我在
Checkbox
我的LOGIN表单中添加一个,然后为这个控件创建两个函数,我调用的第一个函数guerdar_estado_boton
如下:这个函数只是简单地保存了
Checkbox
它是否“激活”的状态。然后我创建了第二个函数
obtener_valor_boton
,如下所示:这个函数我获取
Checkbox
是否激活的状态,默认我传一个false
,即不会保存用户的会话Ahhh 和静态变量是:
一旦你拥有了所有这些功能,在 LOGIN 活动中执行活动内的所有其他内容之前,使用以下内容:
这意味着在执行任何其他操作之前,它将验证
checkbox
它是否保存为已激活,如果为真,它将直接进入下一个活动,而无需通过LOGIN。啊,它逃脱了我执行该功能
guardar_estado_boton()
;Asynctask
成功验证并使用服务器登录后开启。