2010-08-04 8 views
8

Örneğin, kullanıcıların veri depolamaya başlaması için veritabanında yeni bir satır başlayacak olan "Yeni teklif al" düğmesine basabilmelerini istiyorum, ancak etkinliğin nasıl depolanacağından emin değilim (veya sonraki aktivitelerde yeni veriler mevcut olduğunda satırı istemek ve güncellemek zorunda kalacağım satırın _id'i gibi veri veya çapraz aktivite). Bu mekanizmanın adı nedir ve nasıl yapılır?Android'de bir Session/Cookie değişkenine en yakın eşdeğer nedir?

+0

Belki bir paket? –

cevap

10

Tek bir uygulamada Verileri/Servisler arasında veriyi nasıl geçirebilirim?

O paylaşmak istediğiniz verinin türüne bağlıdır: bir uygulamada Etkinlikler/Hizmetleri arasında ilkel veri paylaşmak için

İlkel Veri Türleri , Intent.putExtras() kullanın. Devam etmesi gereken ilkel verileri geçirmek için Preferences depolama mekanizmasını kullanın.

Kalıcı Olmayan nesneler kısa bir süre için karmaşık kalıcı olmayan kullanıcı tanımlı nesne paylaşımı için aşağıdaki yaklaşımlar önerilmektedir:

android.app.Application sınıfı

android .app.Uygulama, genel uygulama durumunu sürdürmesi gerekenler için temel bir sınıftır. Herhangi bir Etkinlik veya Hizmet'ten getApplication() ile erişilebilir. AndroidManifest.xml içinde kayıt olursanız, birkaç yaşam döngüsü yöntemleri vardır ve Android tarafından otomatik olarak başlatılacaktır.

Bir kamu statik alan/yöntem

Etkinlikler/Hizmet genelinde veri erişilebilir hale getirmek için alternatif bir yol, kamu statik alanlar ve/veya yöntemleri kullanmaktır. Bu statik alanlara uygulamanızdaki diğer sınıflardan erişebilirsiniz. Bir nesneyi paylaşmak için, nesneyi oluşturan etkinlik, bu nesneyi işaret edecek bir statik alan belirler ve bu nesneyi kullanmak isteyen başka herhangi bir etkinlik bu statik alana erişir. Nesneleri

Ayrıca uzun tuşlarıyla Nesneler WeakReferences bir HashMap kullanabilirsiniz için WeakReferences arasında

Bir HashMap. Bir etkinlik bir nesneyi başka bir etkinliğe geçirmek istediğinde, sadece nesneyi haritaya koyar ve (ekstra bir Long ya da zaman damgası bazında benzersiz bir Long olan) anahtarı alıcı ekleri yoluyla alıcı aktivitesine gönderir. Alıcı etkinliği, bu anahtarı kullanarak nesneyi alır.

Bir Singleton sınıf

statik Singleton, kullanmanın avantajları vardır böyle bir uygulamaya özel sınıfa GetApplication() döküm veya bir arabirim asılı sorun gitmeden onlara başvurabilirsiniz olarak Tüm uygulama alt sınıflarınızda çeşitli modüllerin bunun yerine bu arabirime başvurabilmesi için.

Ancak, bir statikin yaşam döngüsü sizin kontrolünüzün altında değildir; böylece yaşam döngüsü modeli uymak bir uygulama görünür iken bile

Kalıcı nesneleri için, uygulama sınıfı başlatmalıdır ve) (onCreate() ve onTerminate uygulama Sınıf yöntemleri Bu statik nesneleri yıkmak çalışmaya devam ederse, sistem sürecini öldürmeyi seçebilir ve daha sonra yeniden başlatabilir. Bir etkinlik çağrısından diğerine geçmek için ihtiyacınız olan verilere sahipseniz, söz konusu verilerin, bir etkinlik tarafından kaydedilebilecek durum olduğunda kaydedilen durum olarak temsil edilmesi gerekir. Karmaşık kalıcı kullanıcı tanımlı nesneler paylaşımı için

aşağıdaki yaklaşımlar önerilir: paylaşılan veri başvuru süreci öldürülebilir noktaları arasında muhafaza gerekiyorsa

Application Preferences 
Files 
contentProviders 
SQLite DB 

sonra kalıcı da bu verileri yerleştirmek Uygulama Tercihleri, SQLite DB, Dosyalar veya ContentProviders gibi depolama. Bu bileşenlerin nasıl kullanılacağı hakkında daha fazla bilgi için lütfen Veri Deposuna bakın.

+0

Eh, bu uygulama kullanıcı olarak telefon sahibine sahip olsaydı işe yarardı, fakat benim durumumda, kullanıcının birden çok kullanıcı oluşturabilmesini istiyorum ve bu nedenle birden çok veri satırı olacak. Her şeyi bir SQLite db'de saklıyorum, bu da iyi çalışıyor, ancak bir kullanıcıyı devam ettirdiğimde, kimliği alıp etkinlikten etkinliğe geçirmek istiyorum. Şimdiye kadar, niyette fazladan geçmek işe yarayan tek şeydir, bunun doğru ya da en etkili yol olup olmadığından emin değil. –

+0

Tamam Cevabımı güncelledim, gideceğiniz yol "android.app.Application sınıfı" ile – Pentium10

+0

şimdi ofisten ayrılıyorum, bu yüzden ne işe yarayıp yaramadığını kontrol etmek için zamanınız yok, ama bu bir özlü cevap! Çok teşekkürler. Verileri nasıl paylaşacağımı bulmakta herhangi bir sorun olmamalı. –