Android'de "uygulama ayarlarını" yapmanın en iyi yolu nedir? [kapalı]


108

Bir Android uygulaması için bazı uygulama ayarlarını (bir API'nin URL'si ve test için bazı ayarlar gibi) saklamak istiyorum.

Çoğunlukla bir .NET geliştiricisi olarak çalışıyorum, bu nedenle dosyayı app.configbu amaçla kullanmaya alışkınım . Bunu Android'de yapmanın iyi bir yolu nedir?

Yanıtlar:


148

Birçok uygulama, belirli bir uygulamanın veya bir etkinliğin ayarlarında kullanıcı tercihlerini yakalamanın bir yolunu sağlayabilir. Bunu desteklemek için Android basit bir API seti sağlar.

Tercihler tipik olarak ad-değer çiftleridir. Bir uygulamadaki çeşitli etkinlikler arasında "Paylaşılan Tercihler" olarak depolanabilirler (şu anda işlemler arasında paylaşılamayacağını unutmayın). Veya bir faaliyete özel olarak depolanması gereken bir şey olabilir.

  1. Paylaşılan Tercihler: Paylaşılan tercihler, uygulamaların dışındaki tüm bileşenler (etkinlikler, hizmetler vb.) Tarafından kullanılabilir.

  2. Aktivite ele alınan tercihler: Bu tercihler sadece aktivitede kullanılabilir ve uygulamanın diğer bileşenleri tarafından kullanılamaz.

Paylaşılan Tercihler:

Paylaşılan tercihler getSharedPreferences, Contextsınıfın metodu yardımıyla yönetilir . Tercihler varsayılan bir dosyada (1) saklanır veya tercihlere başvurmak için kullanılacak bir dosya adı (2) belirtebilirsiniz.

(1) Dosya adını belirlediğinizde örneği nasıl elde edeceğiniz aşağıda açıklanmıştır.

public static final String PREF_FILE_NAME = "PrefFile";
   SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATEtercihler için çalışma modudur. Bu varsayılan moddur ve oluşturulan dosyaya yalnızca arayan uygulama tarafından erişileceği anlamına gelir. Desteklenen diğer iki mod MODE_WORLD_READABLEve MODE_WORLD_WRITEABLE. Gelen MODE_WORLD_READABLEbaşka bir uygulama oluşturulan dosyayı okuyabilir ancak bunu değiştiremez. MODE_WORLD_WRITEABLEDiğer uygulamaların olması durumunda , oluşturulan dosya için yazma izinleri de vardır.

(2) Önerilen yol , dosya adını belirtmeden varsayılan modu kullanmaktır.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

Son olarak, tercihler örneğine sahip olduğunuzda , depolanan değerleri tercihlerden nasıl alacağınız aşağıda açıklanmıştır :

 int storedPreference = preferences.getInt("storedInt", 0);

To değerlerini saklamak tercih dosyası içinde SharedPreference.Editornesne kullanılmalıdır. sınıfın Editoriç içe geçmiş arayüzüdür SharedPreference.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Editör ayrıca gibi yöntemler desteklemek remove()ve clear()dosyadan tercih değeri silin.

Aktivite Tercihleri:

Paylaşılan tercihler diğer uygulama bileşenleri tarafından kullanılabilir. Ancak tercihleri ​​diğer bileşenlerle paylaşmanız gerekmiyorsa ve etkinliklere özel tercihler eklemek istiyorsanız. Bunu getPreferences()etkinlik yöntemi yardımıyla yapabilirsiniz . getPreferenceYöntem kullanan getSharedPreferences()tercih dosya adını etkinlik sınıfının adını yöntem.

Tercihleri ​​almak için kod aşağıdadır

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

Değerleri saklama kodu, paylaşılan tercihler durumunda olduğu gibi aynıdır.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Etkinlik durumunu veritabanında depolamak gibi diğer yöntemleri de kullanabilirsiniz. Not Android ayrıca android.preference. Paket, uygulama tercihleri ​​kullanıcı arayüzünü uygulamak için sınıfları tanımlar.

Daha fazla örnek görmek için geliştiriciler sitesindeki Android'in Veri Depolama gönderisine bakın.


1
Teşekkürler. Görünüşe göre yapmam gereken şey, peşinde olduğum şey için bir XML dosyası kullanmak (veya belki de başlangıçta yüklenecek veriler olarak XML kullanıyorum), ancak tercih malzemeleri projemin başka bir bölümü için yararlı.
Tim Badem

1
İnit için xml dosyasını kullanabilirsiniz. PreferenceManager.setDefaultValues(this, R.xml.profiles_preferences, false);
Şöyle bir


1
+1. Akılda tutulması gereken küçük bir parça. Değer preferencesnesnede ayarlandıktan sonra , arka planda kaydetme işlemi eskisi tarafından yapılacağından , çağrılması editor.apply()önerilir editor.commit().
Anindya Chatterjee

2
Burada biraz kafam karıştı. SharedPreferences, kullanıcı ayarlarının uygulama ayarları üzerinde depolanması içindir. Kullanıcı (ve ben de) uygulama ayarlarını, eski API url'sini veya uygulamanın düzgün çalışmak için kullandığı diğer ayarları nerede saklayacağını merak ediyordu.
albanx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.