Android uygulamasında Activity'ler arasında nasıl veri aktarabilirim?

Bir oturum açma sayfası aracılığıyla oturum açtıktan sonra, her bir "etkinlik" üzerinde bir çıkış "düğmesi" olacağı bir senaryom var.

Çıkışa tıklandığında, oturum açan kullanıcının oturum kimliğini çıkışa aktaracağım. Birisi bana session idyi tüm activities için nasıl kullanılabilir tutacağım konusunda rehberlik edebilir mi?

Bu davaya herhangi bir alternatif

Çözüm

Bunu yapmanın en kolay yolu, aktiviteyi başlatmak için kullandığınız Intent içinde oturum kimliğini signout aktivitesine aktarmak olacaktır:

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

Bir sonraki etkinlikte bu niyete erişin:

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

Intents için docs daha fazla bilgi içerir ("Extras" başlıklı bölüme bakın).

Yorumlar (12)

Erich'in belirttiği gibi Intent ekstralarını geçmek iyi bir yaklaşımdır.

Application]2 nesnesi başka bir yoldur ve bazen birden fazla etkinlikte aynı durumla uğraşırken (her yerde almak/ koymak zorunda kalmanın aksine) veya ilkellerden ve Dizelerden daha karmaşık nesnelerle uğraşırken daha kolaydır.

Application'ı genişletebilir ve sonra orada istediğinizi ayarlayabilir/alabilir ve getApplication() ile herhangi bir Activity'den (aynı uygulama içinde) erişebilirsiniz.

Ayrıca, statikler gibi görebileceğiniz diğer yaklaşımların bellek sızıntılarına yol açabilecekleri için sorunlu olabileceğini unutmayın. Uygulama bunu da çözmeye yardımcı olur.

Yorumlar (6)

Aşağıdakileri yapmaya çalışın:

Bunun gibi basit bir "helper" sınıfı (Intent'leriniz için fabrika) oluşturun:

import android.content.Intent;

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

Bu, tüm Niyetleriniz için fabrika olacaktır. Yeni bir Intent'e her ihtiyaç duyduğunuzda, IntentHelper'da statik bir fabrika yöntemi oluşturun. Yeni bir Intent oluşturmak için bunu şu şekilde söylemelisiniz:

IntentHelper.createYourSpecialIntent(getIntent());

Faaliyetinizde. Bir "session" içinde bazı verileri "save" etmek istediğinizde aşağıdakileri kullanın:

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

Ve bu Niyeti gönderin. Hedef Etkinlikte alanınız şu şekilde mevcut olacaktır:

getIntent().getStringExtra("YOUR_FIELD_NAME");

Yani şimdi Intent'i eski oturum gibi kullanabiliriz (servletlerde veya JSP'de olduğu gibi).

Yorumlar (0)