Имам сценарий, при който след влизане в системата чрез страница за влизане ще има бутон за излизане от системата на всяка дейност
.
При натискане на бутона отписване
ще предам идентификатора на сесията на влезлия потребител, за да се отпише. Може ли някой да ме насочи как да запазя идентификатора на сесията
достъпен за всички дейности
?
Някаква алтернатива за този случай
Най-лесният начин да направите това е да предадете идентификатора на сесията на дейността за отписване в Intent
, който използвате за стартиране на дейността:
Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);
Достъп до това намерение при следващата дейност:
String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");
В docs за намеренията има повече информация (погледнете раздела, озаглавен "Екстри").
Предаването на Intent екстри е добър подход, както отбеляза Ерих.
Обектът Application обаче е друг начин и понякога е по-лесен, когато се работи с едно и също състояние в няколко дейности (за разлика от необходимостта да се получава/поставя навсякъде) или с обекти, по-сложни от примитиви и низове.
Можете да разширите Application и след това да задавате/получавате каквото искате там и да имате достъп до него от всяка дейност (в същото приложение) с getApplication().
Също така имайте предвид, че други подходи, които може да видите, като статиката, могат да бъдат проблематични, защото могат да доведат до изтичане на памет. Приложението помага да се реши и този проблем.
Опитайте се да направите следното:
Създайте прост "помощен" клас (фабрика за вашите намерения), като този:
import android.content.Intent;
public class IntentHelper {
public static final Intent createYourSpecialIntent(Intent src) {
return new Intent("YourSpecialIntent").addCategory("YourSpecialCategory").putExtras(src);
}
}
Това ще бъде фабриката за всички ваши намерения. Всеки път, когато се нуждаете от ново намерение, създайте статичен фабричен метод в IntentHelper. За да създадете нов Intent, трябва просто да го кажете по следния начин:
IntentHelper.createYourSpecialIntent(getIntent());
Във вашата дейност. Когато искате да "запазите" някои данни в "сесия", просто използвайте следното:
IntentHelper.createYourSpecialIntent(getIntent()).putExtra("YOUR_FIELD_NAME", fieldValueToSave);
И изпратете това намерение. В целевата дейност вашето поле ще бъде достъпно като:
getIntent().getStringExtra("YOUR_FIELD_NAME");
Така че сега можем да използваме Intent като същата стара сесия (както в сървлети или JSP).