Kako lahko v aplikaciji za Android prenašam podatke med dejavnostmi?

Imam scenarij, v katerem bo po prijavi prek prijavne strani na vsaki dejavnosti na voljo gumb za odjavo.

Ob kliku na gumb odjava bom za odjavo posredoval ID seje prijavljenega uporabnika. Ali mi lahko kdo svetuje, kako naj bo ID seje na voljo za vse dejavnosti?

Ali obstaja kakšna alternativa za ta primer

Rešitev

To bi najlažje storili tako, da ID seje posredujete dejavnosti odjave v Intentu, ki ga uporabljate za zagon dejavnosti:

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", sessionId);
startActivity(intent);

Dostopajte do te namere pri naslednji dejavnosti:

String sessionId = getIntent().getStringExtra("EXTRA_SESSION_ID");

V dokumentaciji za namere je več informacij (oglejte si razdelek z naslovom "Dodatki").

Komentarji (12)

Podajanje Intent dodatkov je dober pristop, kot je opozoril Erich.

Objekt Application je še en način, ki je včasih lažji, kadar imamo opravka z istim stanjem v več dejavnostih (v nasprotju s tem, da ga je treba povsod pridobiti ali vnesti), ali z objekti, ki so kompleksnejši od primitivov in nizov.

Razširite lahko aplikacijo in nato v njej nastavite/prevzamete, kar želite, ter do nje dostopate iz katere koli dejavnosti (v isti aplikaciji) z getApplication().

Upoštevajte tudi, da so lahko drugi pristopi, ki jih lahko vidite, na primer statični pristopi, problematični, ker lahko povzročijo uhajanje pomnilnika 4. Aplikacija pomaga rešiti tudi to.

Komentarji (6)

Poskusite narediti naslednje:

Ustvarite preprost pomožni razred (tovarno za vaše namere), kot je ta:

import android.content.Intent;

public class IntentHelper {
    public static final Intent createYourSpecialIntent(Intent src) {
          return new Intent("YourSpecialIntent").addCategory("YourSpecialCategory").putExtras(src);
    }
}

To bo tovarna za vse vaše namere. Vsakič, ko potrebujete novo namero, ustvarite statično tovarniško metodo v IntentHelperju. Če želite ustvariti novo namero, morate to povedati takole:

IntentHelper.createYourSpecialIntent(getIntent());

V svoji dejavnosti. Ko želite "shraniti" nekaj podatkov v "sejo", uporabite naslednje:

IntentHelper.createYourSpecialIntent(getIntent()).putExtra("YOUR_FIELD_NAME", fieldValueToSave);

In pošljite to namero. V ciljni dejavnosti bo vaše polje na voljo kot:

getIntent().getStringExtra("YOUR_FIELD_NAME");

Tako lahko zdaj uporabljamo namero kot staro sejo (kot v servletih ali JSP).

Komentarji (0)