2016-06-25 5 views
0

ich will in login.java Klasse und Abrufen von in einem anderen welcome.java Klasse und Toast es, Benutzer-ID in der Sitzung speichern, während es Fehler gibt, wenn ich versuche, Benutzer-ID in welcome.java Klasse abzurufen und Anwendung abgestürzt erhalten, und wenn ich remov Code der Benutzer-ID Abrufen von Welcome.java Klasse dann adaequat ohne Benutzer-ID retrievng. bitte, bitte hilf mir, was ich hier vermisse?Wie Benutzer-ID in der Sitzung speichern und eine andere Klasse in Android abrufen?

hier ist sessionmanager.java Code

 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); 
     } 



} 

und hier ist login.java Code

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, "[email protected]"); 


         Intent intent=new Intent(Login.this,Welcome.class); 

         startActivity(intent); 
         finish(); 

     } 

} 

Und hier ist Welcome.java Code

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(); 
    } 
} 

hier gibt es Fehler beim Das Abrufen der Benutzer-ID und der Anwendung wird abgebrochen, wenn ich den abgerufenen Code entfernt habe und die Anwendung ordnungsgemäß funktioniert. s ich denke Fehler existieren hier, wenn ich versuche zu empfangen, bitte irgendjemand mir helfen, was ich tun sollte? Was fehlt mir hier?

+0

Beitrag Fehlermeldungen, die Sie erhalten. – Eenvincible

Antwort

1

Sitzung nicht gestartet, bitte folgenden Code überprüfen,

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(); 
    } 
} 

vorschlagen für Sessionmanager einzelne Instanz verwenden.

+0

wie einzelne Instanz für Sessionmanager verwenden.? @yummy – mejkan

+0

sehen https://en.wikipedia.org/wiki/Singleton_pattern#Java – yummy

Verwandte Themen