Miten voin siirtää tietoja toimintojen välillä Android-sovelluksessa?

Minulla on skenaario, jossa kirjautumisen jälkeen kirjautumissivun kautta on kirjautumispainike jokaisessa toiminnossa.

Kun napsautan "uloskirjautuminen"-painiketta, annan kirjautuneen käyttäjän "session id"-tunnuksen uloskirjautumiseen. Voisiko joku opastaa minua, miten pidän session id:n käytettävissä kaikissa activities-toiminnoissa?

Vaihtoehtoja tälle tapaukselle?

Ratkaisu

Helpoin tapa tehdä tämä olisi siirtää istunnon id uloskirjautumisaktiviteetille Intent-tiedotteessa, jota käytät aktiviteetin käynnistämiseen:

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

Käytä tuota intentia seuraavassa aktiviteetissa:

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

Tarkoitusten docs sisältää lisätietoja (katso osio "Extras").

Kommentit (12)

Intent extran välittäminen on hyvä lähestymistapa, kuten Erich totesi.

Application-objekti on kuitenkin toinen tapa, ja se on joskus helpompi, kun samaa tilaa käsitellään useissa toiminnoissa (toisin kuin jos sitä pitäisi hakea/laittaa joka paikkaan) tai kun on kyse monimutkaisemmista objekteista kuin primitiiveistä ja merkkijonoista.

Voit laajentaa Application-oliota ja asettaa/saada sinne mitä tahansa haluamasi ja käyttää sitä mistä tahansa Activitystä (samassa sovelluksessa) getApplication() -oliolla.

Pidä myös mielessä, että muut lähestymistavat, kuten staattisuus, voivat olla ongelmallisia, koska ne voivat johtaa muistivuotoihin. Application auttaa ratkaisemaan myös tämän.

Kommentit (6)

Yritä toimia seuraavasti:

Luo yksinkertainen "helper" -luokka (tehdas Intentsille), kuten tämä:

import android.content.Intent;

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

Tästä tulee kaikkien Intenttiesi tehdas. Aina kun tarvitset uuden Intentin, luo staattinen tehdasmetodi IntentHelper-luokkaan. Luodaksesi uuden Intentin sinun tulisi vain sanoa se näin:

IntentHelper.createYourSpecialIntent(getIntent());

Aktiviteetissasi. Kun haluat "tallentaa" joitakin tietoja "istuntoon" käytä vain seuraavaa:

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

Ja lähetä tämä Intent. Kohdeaktiviteetissa kenttäsi on käytettävissä muodossa:

getIntent().getStringExtra("YOUR_FIELD_NAME");

Nyt voimme siis käyttää Intentiä kuten vanhaa istuntoa (kuten servleteissä tai JSP:ssä).

Kommentit (0)