如何在会话中存储userid并在android中检索另一个类?

时间:2016-06-25 17:13:21

标签: java android session

我想在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和应用程序崩溃时给出了错误,如果我删除了检索到的代码,那么应用程序工作正常。当我试图接收时,我认为这里存在错误,请任何人帮助我,我该怎么办?我在这里缺少什么?

1 个答案:

答案 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的单个实例。