Bir kerelik etkinlik oluşturmak için Android Paylaşılan tercihleri ​​(örnek) [kapalı]


295

A ve B formları ve form verilerini doldurup veritabanına (SQLITE) kaydettikten sonra A, B ve C olmak üzere üç aktivitem var. A'dan B'ye ve sonra B'den C'ye niyet kullanıyorum. İstediğim şey, uygulamamı her açtığımda C'yi artık A ve B değil ana ekranım olarak istiyorum.

Sanırım paylaşılan tercihler bunun için işe yarayacaktır, ancak bana bir başlangıç ​​yeri vermek için iyi bir örnek bulamıyorum. Herhangi bir yardım mutluluk duyacağız.


10
Android geliştirici sitesinden Paylaşılan Tercihleri ​​Kullanma .
Onik


12
Bu soruyu yeniden açmak için oy kullanıyorum çünkü gerçekten bir öneri istemiyor.
Suragch

Yanıtlar:


620

Tercihlerde değerleri ayarlama:

// MY_PREFS_NAME - a static String variable like: 
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("name", "Elena");
 editor.putInt("idName", 12);
 editor.apply();

Verileri tercihinizden alın:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.

Daha fazla bilgi:

Paylaşılan Tercihleri ​​Kullanma

Paylaşılan Tercihler


74
Bunun yerine application () kullanmayı düşünün; commit, verilerini derhal kalıcı depolamaya yazar, uygula ise arka planda işler.
CodeNinja

12
apply()commit()senkronize olduğu yerde disk G / Ç gerçekleştirmek için eşzamansız bir çağrıdır . Bu yüzden commit()UI iş parçacığından arama yapmaktan kaçının .
Aniket Thakur

103

Paylaşılan Tercihler Oluştur

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); 
Editor editor = pref.edit();

Verileri KEY / VALUE çifti olarak saklama

editor.putBoolean("key_name1", true);           // Saving boolean - true/false
editor.putInt("key_name2", "int value");        // Saving integer
editor.putFloat("key_name3", "float value");    // Saving float
editor.putLong("key_name4", "long value");      // Saving long
editor.putString("key_name5", "string value");  // Saving string

// Save the changes in SharedPreferences
editor.apply(); // commit changes

SharedPreferences verilerini alın

// Anahtar için değer yoksa, ikinci parametre değerini döndürür - Bu durumda null

boolean userFirstLogin= pref.getBoolean("key_name1", true);  // getting boolean
int pageNumber=pref.getInt("key_name2", 0);             // getting Integer
float amount=pref.getFloat("key_name3", null);          // getting Float
long distance=pref.getLong("key_name4", null);          // getting Long
String email=pref.getString("key_name5", null);         // getting String

SharedPreferences'dan Anahtar değeri silme

editor.remove("key_name3"); // will delete key key_name3
editor.remove("key_name4"); // will delete key key_name4

// Save the changes in SharedPreferences
editor.apply(); // commit changes

SharedPreferences'daki tüm verileri temizle

 editor.clear();
 editor.apply(); // commit changes

3
pref.getBoolean ("anahtar_adı1", null); boş olamaz. Depolanan hiçbir şey yoksa bir defalut değerine ihtiyaç duyar.
Boris Karloff

2
Commit () yerine Apply () yöntemini kullanmanız daha iyi olur. uygulamak () eşzamansız ve bir arka plan iş parçacığı üzerinde çalışacak
Androider

Key_name3 veya key_name4 boşsa çökecektir
TacB0sS

1
Kullanıcı bilgilerini depolayan bir kayıt sayfam ve kullanıcının bu bilgilerle oturum açtığı bir giriş sayfam var. Ben iki sınıf var, ben bir sınıf bilgi almak ve bu bilgileri diğer sınıf kullanmak istiyorum.Kodumda yukarıdaki kodu kullandığınızda. Boş gösterici istisnası alıyorum. Benim gibi bir kullanım var mı? @ZiluszLórántSzilveszter
ZpCikTi

43

Nasıl Intialize Edilir?

// 0 - for private mode`
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 

Editor editor = pref.edit();

Verileri Paylaşılan Tercihte Nasıl Saklanır?

editor.putString("key_name", "string value"); // Storing string

VEYA

editor.putInt("key_name", "int value"); //Storing integer

Uygulamayı unutmayın:

editor.apply();

Paylaşılan Tercihlerden Veri Nasıl Alınır?

pref.getString("key_name", null); // getting String

pref.getInt("key_name", 0); // getting Integer

Umarım bu yardımcı olur :)


Bir etkinliğe, fragmana veya herkese açık bir sınıfa erişiyorsanız başlatma önemlidir
DragonFire

19

Özel SharedPreference sınıfınızı oluşturabilirsiniz

public class YourPreference {   
    private static YourPreference yourPreference;
    private SharedPreferences sharedPreferences;

    public static YourPreference getInstance(Context context) {
        if (yourPreference == null) {
            yourPreference = new YourPreference(context);
        }
        return yourPreference;
    }

    private YourPreference(Context context) {
        sharedPreferences = context.getSharedPreferences("YourCustomNamedPreference",Context.MODE_PRIVATE);
    }

    public void saveData(String key,String value) {
        SharedPreferences.Editor prefsEditor = sharedPreferences.edit();
        prefsEditor .putString(key, value);
        prefsEditor.commit();           
    }

    public String getData(String key) {
        if (sharedPreferences!= null) {
           return sharedPreferences.getString(key, "");
        }
        return "";         
    }
}

YourPrefrence örneğini aşağıdaki gibi alabilirsiniz:

YourPreference yourPrefrence = YourPreference.getInstance(context);
yourPreference.saveData(YOUR_KEY,YOUR_VALUE);

String value = yourPreference.getData(YOUR_KEY);

1
Dize değeri = yourPreference.getData (YOUR_KEY); Hata: statik olmayan içerik statik bağlamda belirtilemez
Jana Babu

Merhaba Context örneği bana null veriyordu, bu yüzden sharedPreferences = context.getSharedPreferences ("YourCustomNamedPreference", Context.MODE_PRIVATE); denemek bu satır yakalamak blok ve onun iş ama şey bu yüzden null veren olmasıdır?
Ionic

Bu sınıfı projemde kullanıyorum ve BaseActivity'deki paylaşılan tercihlerimi başlatıyorum ve kullanıcı giriş durumunu kontrol etmek ve uygulamadan çıkmak için diğer aktivitelerde (splashScreen & login & main activity) kullanıyorum. Ancak bu çıkış için android 8 için işe yaramaz! Herhangi bir öneriniz var mı?
roghayeh hosseini

17

Yukarıdaki tüm örnekleri çok kafa karıştırıcı buldum, bu yüzden kendim yazdım. Ne yaptığınızı biliyorsanız kod parçaları iyi, ama benim gibi olmayan insanlar ne olacak?

Bunun yerine bir cut-n-paste çözümü ister misiniz? İşte burada!

Yeni bir java dosyası oluşturun ve anahtar deposu olarak adlandırın. Sonra bu kodu yapıştırın:

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;

public class Keystore { //Did you remember to vote up my example?
    private static Keystore store;
    private SharedPreferences SP;
    private static String filename="Keys";

private Keystore(Context context) {
    SP = context.getApplicationContext().getSharedPreferences(filename,0);
}

public static Keystore getInstance(Context context) {
    if (store == null) {
        Log.v("Keystore","NEW STORE");
        store = new Keystore(context);
    }
    return store;
}

public void put(String key, String value) {//Log.v("Keystore","PUT "+key+" "+value);
    Editor editor = SP.edit();
    editor.putString(key, value);
    editor.commit(); // Stop everything and do an immediate save!
    // editor.apply();//Keep going and save when you are not busy - Available only in APIs 9 and above.  This is the preferred way of saving.
}

public String get(String key) {//Log.v("Keystore","GET from "+key);
    return SP.getString(key, null);

}

public int getInt(String key) {//Log.v("Keystore","GET INT from "+key);
    return SP.getInt(key, 0);
}

public void putInt(String key, int num) {//Log.v("Keystore","PUT INT "+key+" "+String.valueOf(num));
    Editor editor = SP.edit();

    editor.putInt(key, num);
    editor.commit();
}


public void clear(){ // Delete all shared preferences
    Editor editor = SP.edit();

    editor.clear();
    editor.commit();
}

public void remove(){ // Delete only the shared preference that you want
    Editor editor = SP.edit();

    editor.remove(filename);
    editor.commit();
}
}

Şimdi bu dosyayı kaydedin ve unutun. İşiniz bitti. Şimdi etkinliğinize geri dönün ve şu şekilde kullanın:

public class YourClass extends Activity{

private Keystore store;//Holds our key pairs

public YourSub(Context context){
    store = Keystore.getInstance(context);//Creates or Gets our key pairs.  You MUST have access to current context!

    int= store.getInt("key name to get int value");
    string = store.get("key name to get string value");

    store.putInt("key name to store int value",int_var);
    store.put("key name to store string value",string_var);
    }
}

Bu sınıfı projemde kullanıyorum ve BaseActivity'deki paylaşılan tercihlerimi başlatıyorum ve kullanıcı giriş durumunu kontrol etmek ve uygulamadan çıkmak için diğer aktivitelerde (splashScreen & login & main activity) kullanıyorum. Ancak bu çıkış için android 8 için işe yaramaz! Herhangi bir öneriniz var mı?
roghayeh hosseini

15

Shared Preferencesözel ilkel verileri anahtar / değer çiftlerinde depolayan XML dosyalarıdır. Veri Türleri dahil Booleans , yüzer , int , uzun ve dizeleri .

Uygulama genelinde erişilebilir olan bazı verileri kaydetmek istediğimizde, bunu yapmanın bir yolu onu global değişkene kaydetmek. Ancak uygulama kapatıldığında ortadan kaybolacaktır. Bir başka ve önerilen yol da tasarruf etmektir SharedPreference. SharedPreferences dosyasına kaydedilen verilere uygulama boyunca erişilebilir ve uygulama kapatıldıktan veya yeniden başlatıldıktan sonra bile devam eder.

SharedPreferences , verileri anahtar / değer çiftine kaydeder ve aynı şekilde erişilebilir.

Nesneyi SharedPreferencesiki yöntem kullanarak oluşturabilirsiniz ,

1). getSharedPreferences () : Bu yöntemleri kullanarak, Çoklu SharedPreferences.ve adındaki ilk parametreleri oluşturabilirsiniz SharedPreferences.

2). getPreferences () : Bu yöntemi kullanarak Single oluşturabilirsiniz SharedPreferences.

Veri depolama

Değişken bildirimi ekleme / Tercih Dosyası Oluşturma

public static final String PREFERENCES_FILE_NAME = "MyAppPreferences";

Dosya adına bir tanıtıcı alma (getSharedPreferences kullanarak)

SharedPreferences settingsfile= getSharedPreferences(PREFERENCES_FILE_NAME,0);

Editör'ü açın ve Anahtar / değer çiftleri ekleyin

SharedPreferences.Editor myeditor = settingsfile.edit(); 
myeditor.putBoolean("IITAMIYO", true); 
myeditor.putFloat("VOLUME", 0.7)
myeditor.putInt("BORDER", 2)
myeditor.putLong("SIZE", 12345678910L)
myeditor.putString("Name", "Amiyo")
myeditor.apply(); 

myeditor.apply()Yukarıda gösterildiği gibi kullanmayı / kaydetmeyi unutmayın .

Verileri Alma

 SharedPreferences mysettings= getSharedPreferences(PREFERENCES_FILE_NAME, 0);
IITAMIYO = mysettings.getBoolean("IITAMIYO", false); 
//returns value for the given key. 
//second parameter gives the default value if no user preference found
// (set to false in above case)
VOLUME = mysettings.getFloat("VOLUME", 0.5) 
//0.5 being the default value if no volume preferences found
// and similarly there are get methods for other data types

13
public class Preferences {

public static final String PREF_NAME = "your preferences name";

@SuppressWarnings("deprecation")
public static final int MODE = Context.MODE_WORLD_WRITEABLE;

public static final String USER_ID = "USER_ID_NEW";
public static final String USER_NAME = "USER_NAME";

public static final String NAME = "NAME";
public static final String EMAIL = "EMAIL";
public static final String PHONE = "PHONE";
public static final String address = "address";

public static void writeBoolean(Context context, String key, boolean value) {
    getEditor(context).putBoolean(key, value).commit();
}

public static boolean readBoolean(Context context, String key,
        boolean defValue) {
    return getPreferences(context).getBoolean(key, defValue);
}

public static void writeInteger(Context context, String key, int value) {
    getEditor(context).putInt(key, value).commit();

}

public static int readInteger(Context context, String key, int defValue) {
    return getPreferences(context).getInt(key, defValue);
}

public static void writeString(Context context, String key, String value) {
    getEditor(context).putString(key, value).commit();

}

public static String readString(Context context, String key, String defValue) {
    return getPreferences(context).getString(key, defValue);
}

public static void writeFloat(Context context, String key, float value) {
    getEditor(context).putFloat(key, value).commit();
}

public static float readFloat(Context context, String key, float defValue) {
    return getPreferences(context).getFloat(key, defValue);
}

public static void writeLong(Context context, String key, long value) {
    getEditor(context).putLong(key, value).commit();
}

public static long readLong(Context context, String key, long defValue) {
    return getPreferences(context).getLong(key, defValue);
}

public static SharedPreferences getPreferences(Context context) {
    return context.getSharedPreferences(PREF_NAME, MODE);
}

public static Editor getEditor(Context context) {
    return getPreferences(context).edit();
}

}

**** Aşağıdakileri kullanarak değer yazmak için Tercihleri ​​kullanın: - ****

Preferences.writeString(getApplicationContext(),
                    Preferences.NAME, "dev");

**** Aşağıdakileri kullanarak değeri okumak için Tercihleri ​​kullanın: - ****

Preferences.readString(getApplicationContext(), Preferences.NAME,
                    "");

7

Oluşturmanın en iyi yolu SharedPreferenceve küresel kullanım için aşağıdaki gibi bir sınıf oluşturmanız gerekir:

public class PreferenceHelperDemo {
    private final SharedPreferences mPrefs;

    public PreferenceHelperDemo(Context context) {
        mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
    }

    private String PREF_Key= "Key";

    public String getKey() {
        String str = mPrefs.getString(PREF_Key, "");
        return str;
    }

    public void setKey(String pREF_Key) {
        Editor mEditor = mPrefs.edit();
        mEditor.putString(PREF_Key, pREF_Key);
        mEditor.apply();
    }

}

PreferenceManager.getDefaultSharedPreferences kullanımdan kaldırıldı
Guy4444

4
SharedPreferences mPref;
SharedPreferences.Editor editor;

public SharedPrefrences(Context mContext) {
    mPref = mContext.getSharedPreferences(Constant.SharedPreferences, Context.MODE_PRIVATE);
    editor=mPref.edit();
}

public void setLocation(String latitude, String longitude) {
    SharedPreferences.Editor editor = mPref.edit();
    editor.putString("latitude", latitude);
    editor.putString("longitude", longitude);
    editor.apply();
}

public String getLatitude() {
    return mPref.getString("latitude", "");
}

public String getLongitude() {
    return mPref.getString("longitude", "");
}

public void setGCM(String gcm_id, String device_id) {
     editor.putString("gcm_id", gcm_id);
    editor.putString("device_id", device_id);
    editor.apply();
}

public String getGCMId() {
    return mPref.getString("gcm_id", "");
}

public String getDeviceId() {
    return mPref.getString("device_id", "");
}


public void setUserData(User user){

    Gson gson = new Gson();
    String json = gson.toJson(user);
    editor.putString("user", json);
    editor.apply();
}
public User getUserData(){
    Gson gson = new Gson();
    String json = mPref.getString("user", "");
    User user = gson.fromJson(json, User.class);
    return user;
}

public void setSocialMediaStatus(SocialMedialStatus status){

    Gson gson = new Gson();
    String json = gson.toJson(status);
    editor.putString("status", json);
    editor.apply();
}
public SocialMedialStatus getSocialMediaStatus(){
    Gson gson = new Gson();
    String json = mPref.getString("status", "");
    SocialMedialStatus status = gson.fromJson(json, SocialMedialStatus.class);
    return status;
}

3

Paylaşılan Tercihlere Yaz

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
 editor.commit(); 

Paylaşılan Tercihlerden Okuyun

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);

GetSharedPreferences ("MyPref", MODE_PRIVATE) kullanın; yerine: getPreferences (Context.MODE_PRIVATE); Çünkü veriler yalnızca bulunduğunuz etkinlik için geçerli olacaktır. Bunun nedeni, bu aktivitede dosya adının aktivite adında olmasıdır ve bu nedenle bu tercihleri ​​başka bir aktiviteden çağırırsanız veriler farklı olacaktır.
Guy4444

0
Initialise here..
 SharedPreferences msharedpref = getSharedPreferences("msh",
                    MODE_PRIVATE);
            Editor editor = msharedpref.edit();

store data...
editor.putString("id",uida); //uida is your string to be stored
editor.commit();
finish();


fetch...
SharedPreferences prefs = this.getSharedPreferences("msh", Context.MODE_PRIVATE);
        uida = prefs.getString("id", "");

0
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

3
Stack Overflow'a hoş geldiniz! Lütfen sağladığınız kodu nasıl kullanacağınızı ve neden çalıştığını açıklayınız. Teşekkürler!
intcreator

0

Ayrıca , bu amaçla yazılmış geçmiş bir örnek projeme de göz atabilirsiniz . Yerel olarak bir ad kaydeder ve bir kullanıcının isteği üzerine veya uygulama başladığında alır.

Ancak, şu anda, verileri devam ettirmek için commit(yerine apply) kullanmak daha iyi olacaktır . Daha fazla bilgi burada .


0
        // Create object of SharedPreferences.
        SharedPreferences sharedPref = getSharedPreferences("mypref", 0);

        //now get Editor
        SharedPreferences.Editor editor = sharedPref.edit();

        //put your value
        editor.putString("name", required_Text);

        //commits your edits
        editor.commit();

       // Its used to retrieve data
       SharedPreferences sharedPref = getSharedPreferences("mypref", 0);
       String name = sharedPref.getString("name", "");

       if (name.equalsIgnoreCase("required_Text")) {
          Log.v("Matched","Required Text Matched");
          } else {
               Log.v("Not Matched","Required Text Not Matched"); 
                 }

0

Paylaşılan Tercihleri ​​öğrenmek çok kolaydır, bu nedenle paylaşılan tercih hakkındaki bu basit eğiticiye bir göz atın

import android.os.Bundle;
import android.preference.PreferenceActivity;

    public class UserSettingActivity extends PreferenceActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

      addPreferencesFromResource(R.xml.settings);

    }
}
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.