2013-04-18 39 views
0

我正在開發android中的應用程序。我使用SharedPreferences進行會話管理的登錄和註銷活動。我的應用程序註銷,將數據存儲在sharedpreferences中以保持會話成功完成。當我從應用程序註銷(第二個活動)並獲取呈現到第一個活動(登錄活動),但是當成功註銷後我單擊返回在模擬器上的按鈕時仍會發生第二個活動,並且遇到類似2.3.3等某些版本例外註銷後第二個活動仍然保留在會話中

java.lang.RuntimeException: Unable to destroy activity {com.oj.bs/com.oj.bs.LoginActivity}: java.lang.NullPointerException 

有人可以解決這個問題。請參考下面的代碼

以下是繼登錄活動代碼

sessionmngr = new SessionManager(getApplicationContext()); 

        JSONObject json_user = jsonObj.getJSONObject("user"); 
        sessionmngr.createLoginSession(id,json_user.getString(KEY_UNAME), 
          json_user.getString(KEY_UEMAIL)); 
        . 
        . 

會話管理

public class SessionManager { 

SharedPreferences pref; 
Editor editor; 
Context contxt; 
//shared pref mode 
int PRIVATE_MODE = 0; 
// Sharedpref file name 
private static final String PREF_NAME = "bookingScapePref"; 

// All Shared Preferences Keys 
private static final String IS_LOGIN = "IsLoggedIn"; 
public static final String KEY_NAME = "name"; 
public static final String KEY_ID = "id"; 
public static final String KEY_EMAIL = "email"; 

public SessionManager(Context context) { 
    super(); 
    this.contxt = context; 
    pref = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE); 
    editor = pref.edit(); 
    editor.commit(); 
} 
/** 
* Create login session 
* */ 
public void createLoginSession(int id,String name, String email) { 

    editor.putBoolean(IS_LOGIN,true); 
    editor.putString(KEY_NAME, name); 
    editor.putString(KEY_EMAIL, email); 
    editor.putInt(KEY_ID, id); 
    editor.commit(); 
} 
/** 
* Get stored session data 
* */ 
public HashMap<String, String> getUserDetails() { 
    HashMap<String, String> userDetails = new HashMap<String, String>(); 
    userDetails.put(KEY_NAME, pref.getString(KEY_NAME, null)); 
    userDetails.put(KEY_EMAIL, pref.getString(KEY_EMAIL, null)); 
    return userDetails; 
} 
/** 
* Check login method will check user login status 
* */ 
public void checkLogin() { 

    if (!this.isLoggedIn()) { 
     Intent i = new Intent(contxt, LoginActivity.class); 
     //closing all the activity 
     i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     //Add new Flag to start new Activity 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     contxt.startActivity(i); 
    } 
} 

public void logoutUser() { 
    //clearing all data from sharedPreferences 
    editor.clear(); 
    editor.commit(); 
    Intent intnt = new Intent(contxt, LoginActivity.class); 
    // Closing all the Activities 
    intnt.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    // Add new Flag to start new Activity 
    intnt.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

    // Staring Login Activity 
    contxt.startActivity(intnt); 
} 

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

}

這是次活動在這裏,我正在檢查會議

public class ProjectFragActivity extends SherlockFragmentActivity { 

SessionManager sessionMngr ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    sessionMngr = new SessionManager(getApplicationContext()); 

    Toast.makeText(getApplicationContext(), "User Login Status: " + sessionMngr .isLoggedIn(), 
      Toast.LENGTH_LONG).show(); 
    sessionMngr.checkLogin(); 
      . 
      . 

回答

1

我不知道如何該會話和所有正在努力,BT,您嘗試使用完成()函數,在做註銷的動作,這樣的動作不會在那裏一段時間後按下按鈕

相關問題