我想在login.java类的session中保存userid并在另一个welcome.java类中检索并烘烤它,当我尝试在welcome.java类中检索userid并且应用程序崩溃时出现错误,如果我删除从welcome.java类检索userid的代码然后工作正常没有retrievevng用户ID。所以请任何人帮助我,我在这里失踪了吗?
这里是sessionmanager.java代码
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_userid = "userid";
//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 userid, String email){
// Storing login value as TRUE
editor.putBoolean(IS_LOGIN, true);
// Storing name in pref
editor.putString(KEY_userid, userid);
//editor.putString(KEY_NAME, name);
// Storing email in pref
editor.putString(KEY_EMAIL, email);
// commit changes
editor.commit();
}
/**
* Check login method will 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()){
// user is not logged in redirect him to Login Activity
Intent i = new Intent(_context, Login.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_userid, pref.getString(KEY_userid, null));
//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();
//Toast.makeText(SessionManager.this, "function call...: " , Toast.LENGTH_LONG).show();
// After logout redirect user to Loing Activity
Intent i = new Intent(_context, Login.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);
//Intent intent = new Intent(getApplicationContext(), Second_activity.class);
//startActivity(intent);
}
/**
* Quick check for login
* **/
// Get Login State
public boolean isLoggedIn(){
return pref.getBoolean(IS_LOGIN, false);
}
}
这里是login.java代码
In this class i removed extra code just write relevant code where userid save in session after login success,
public class Login extends Activity {
private EditText editTextUserName;
private EditText editTextPassword;
SessionManager session;
String userid,;
String username;
String password,regid;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registeratin);
session = new SessionManager(getApplicationContext());
editTextUserName = (EditText) findViewById(R.id.nameID);
editTextPassword = (EditText) findViewById(R.id.et_pass_ID);
}
respObject.getJSONObject("response");
userid = responses.getString("memberID");
String active = respObject.getString("status");
if(active.equalsIgnoreCase("200")){
session.createLoginSession(userid, "anroidhive@gmail.com");
Intent intent=new Intent(Login.this,Welcome.class);
startActivity(intent);
finish();
}
}
这是Welcome.java代码
Here i want to retrieve userid in this class that i saved before in login class, here i am writing only relevant code .
public class Welcome extends Activity {
SessionManager session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
HashMap<String, String> user = session.getUserDetails();
String userid = user.get(SessionManager.KEY_userid);
Toast.makeText(this, userid+"", Toast.LENGTH_LONG).show();
}
}
这里它在检索用户ID和应用程序崩溃时给出了错误,如果我删除了检索到的代码,那么应用程序工作正常。当我试图接收时,我认为这里存在错误,请任何人帮助我,我该怎么办?我在这里缺少什么?
答案 0 :(得分:1)
会话未启动,请检查以下代码,
public class Welcome extends Activity {
SessionManager session;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
session = new SessionManager(getApplicationContext());//<-- this is what you missed
HashMap<String, String> user = session.getUserDetails();
String userid = user.get(SessionManager.KEY_userid);
Toast.makeText(this, userid+"", Toast.LENGTH_LONG).show();
}
}
建议使用SessionManager的单个实例。