2013-04-18 18 views
2

Я разрабатываю приложения в 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(); 
      . 
      . 
+0

Можете ли вы опубликовать код, в котором приложение сбой (в 'onDestroy()') –

+0

Также опубликуйте свой манифест. –

ответ

0
@Override 
public void onBackPressed() { 
// TODO Auto-generated method stub 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
super.onBackPressed(); 
} 

Привет, Используйте onBackpressed функцию в экране входа в систему и реализовать этот Intent функцию. Он перенесет вас на главный экран телефона.

Надеюсь, это даст вам некоторое решение.

0

Простым решением должно быть позвонить finish(); во второе мероприятие.

+0

Я завершаю действие по функции destroy. Я столкнулся с исключением, например, «java.lang.runtimeException, неспособным уничтожить действие», когда я нажал кнопку «Назад». –

+0

@SwapnilTayade Действие уже завершено, когда вызывается 'onDestroy()'. Вы не должны называть 'finish()' в это время. Отправьте код своего 'onDestroy()' –

0

Прежде всего, не звоните finish() в destroy(), деятельность уже заканчивается и уходит, плюс это завинчивается со всем остальным. Что вам нужно сделать, так это позвонить finish() при выходе из системы, какую бы функцию вы ни выбрали, в конце ее, введите finish().

+0

Так оно сработало? – LuckyMe

Смежные вопросы