एक बार की गतिविधि (उदाहरण) बनाने के लिए Android साझा प्राथमिकताएँ [बंद]


294

मेरे पास ए, बी और सी तीन गतिविधियाँ हैं जहाँ ए और बी फॉर्म हैं और फॉर्म डेटा को डेटाबेस (SQLITE) में भरने और सहेजने के बाद। मैं ए से बी और फिर बी से सी से इरादे का उपयोग कर रहा हूं। मैं चाहता हूं कि हर बार जब मैं अपना ऐप खोलूं तो मैं सी को अपनी होम स्क्रीन के रूप में चाहता हूं और ए और बी को नहीं।

मुझे लगता है कि साझा प्राथमिकताएं इसके लिए काम करेंगी, लेकिन मुझे एक शुरुआती जगह देने के लिए एक अच्छा उदाहरण नहीं मिल सकता है। किसी भी सहायता की सराहना की जाएगी।



1
क्या आपने डेवलपर ट्यूटोरियल पर देखें ।android.com/guide/topics/data/data-storage.html# pref ?
AxiomaticNexus

12
मैं इस प्रश्न को फिर से खोलने के लिए मतदान कर रहा हूं क्योंकि यह वास्तव में सिफारिश के लिए नहीं कह रहा है।
सुरगाछ

जवाबों:


619

वरीयता में मान सेट करना:

// 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();

वरीयता से डेटा प्राप्त करें:

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.

और जानकारी:

साझा वरीयताएँ का उपयोग करना

वरीयताएँ साझा की


74
उपयोग करने पर विचार करें () के बजाय; प्रतिबद्ध अपने डेटा को लगातार स्टोरेज के लिए तुरंत लिखता है, जबकि एप्लिकेशन इसे पृष्ठभूमि में संभाल लेगा।
कोडनिजा

12
apply()एसिंक्रोनस कॉल डिस्क I / O करने के लिए है जहां commit()तुल्यकालिक है। इसलिए commit()UI थ्रेड से कॉल करने से बचें ।
अनिकेत ठाकुर

103

SharedPreferences बनाएँ

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

डेटा को कुंजी / वैल्यू जोड़ी के रूप में संग्रहीत करना

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 डेटा प्राप्त करें

// यदि कुंजी के लिए मान मौजूद नहीं है, तो दूसरा सर्वोपरि मान लौटाएं - इस स्थिति में शून्य

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 से मुख्य मूल्य हटाना

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 से सभी डेटा साफ़ करें

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

3
pref.getBoolean ("key_name1", null); यह शून्य नहीं हो सकता। अगर वहाँ कुछ भी संग्रहीत नहीं है, तो उसे एक मान का मान चाहिए।
बोरिस कार्लॉफ़

2
आप बेहतर (लागू) प्रतिबद्ध के बजाय () का उपयोग करेंगे। लागू () अतुल्यकालिक है और आप इसे एक पृष्ठभूमि थ्रेड पर चलाएंगे
Androider

दुर्घटना होगी अगर
key_name3

1
मेरे पास एक रजिस्टर पेज है जो उपयोगकर्ता की जानकारी संग्रहीत करता है और मेरे पास एक लॉगिन पृष्ठ है जो उपयोगकर्ता उस जानकारी के साथ साइन इन करता है। मेरे पास दो कक्षाएं हैं, मैं एक वर्ग की जानकारी लेता हूं और मैं उस जानकारी को अन्य वर्ग का उपयोग करना चाहता हूं। जब मैं अपने कोड में उपरोक्त कोड का उपयोग करता हूं। मैं अशक्त सूचक अपवाद लेता हूं। क्या मेरे जैसा कोई उपयोग है? @ क्रुसज़्लोरेंटज़िल्वेज़्टर
ज़्पिकटीटी

43

कैसे पहचानें?

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

Editor editor = pref.edit();

साझा वरीयता में डेटा कैसे स्टोर करें?

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

या

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

और लागू करने के लिए मत भूलना:

editor.apply();

साझा वरीयताएँ से डेटा कैसे प्राप्त करें?

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

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

आशा है कि यह यू की मदद करेगा :)


यदि आप किसी गतिविधि, खंड या सार्वजनिक वर्ग में पहुँच रहे हैं, तो यह महत्वपूर्ण है
ड्रैगनफायर

19

आप अपना कस्टम साझाकरण श्रेणी बना सकते हैं

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 उदाहरण प्राप्त कर सकते हैं जैसे:

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

String value = yourPreference.getData(YOUR_KEY);

1
स्ट्रिंग मूल्य = yourPreference.getData (आपका_केय); त्रुटि: गैर-स्थिर सामग्री नॉट को स्थिर संदर्भ में संदर्भित किया जा सकता है
जन बाबू

Context का उच्च उदाहरण मुझे अशक्त कर रहा था, इसलिए मैंने साझा किए गएPreferences = संदर्भ.getSaredPreferences ("YourCustomNamedPreference", Context.MODE_PRIVATE) डाल दिया है; कोशिश में यह लाइन ब्लॉक और उसके काम को पकड़ती है, लेकिन बात यह है कि यह अशक्त क्यों है?
ईओण

मैं अपनी परियोजना में इस वर्ग का उपयोग करता हूं और बेसऐक्टिविटी में अपने साझाकरणों को सम्मिलित करता हूं, और उपयोगकर्ता लॉगिन स्थिति की जांच और ऐप से बाहर निकलने के लिए अन्य गतिविधियों (स्प्लैशस्क्रीन और लॉगिन और मुख्य गतिविधि) में उपयोग करता हूं। लेकिन यह बाहर निकलने के लिए एंड्रॉइड 8 के लिए काम नहीं करता है! क्या आपके पास कोई सुझाव है?
रोघैह होसेनी

17

मुझे अभी उपरोक्त सभी उदाहरण बहुत उलझाने वाले लगे, इसलिए मैंने अपना लिखा। कोड के टुकड़े ठीक हैं यदि आप जानते हैं कि आप क्या कर रहे हैं, लेकिन मेरे जैसे लोगों के बारे में क्या है जो नहीं करते हैं?

इसके बजाय कट-एन-पेस्ट समाधान चाहते हैं? खैर यहाँ यह है!

एक नया जावा फ़ाइल बनाएँ और इसे कीस्टोर कहें। फिर इस कोड में पेस्ट करें:

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();
}
}

अब उस फाइल को सेव करें और उसके बारे में भूल जाएं। आप इसके साथ कर रहे हैं। अब अपनी गतिविधि में वापस जाएं और इसका उपयोग इस तरह करें:

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);
    }
}

मैं अपनी परियोजना में इस वर्ग का उपयोग करता हूं और बेसऐक्टिविटी में अपने साझाकरणों को सम्मिलित करता हूं, और उपयोगकर्ता लॉगिन स्थिति की जांच और ऐप से बाहर निकलने के लिए अन्य गतिविधियों (स्प्लैशस्क्रीन और लॉगिन और मुख्य गतिविधि) में उपयोग करता हूं। लेकिन यह बाहर निकलने के लिए एंड्रॉइड 8 के लिए काम नहीं करता है! क्या आपके पास कोई सुझाव है?
रोघैह होसेनी

15

Shared Preferencesएक्सएमएल फाइलें कुंजी-मूल्य वाले जोड़े में निजी आदिम डेटा संग्रहीत करने के लिए हैं। डेटा प्रकारों में बूलियन , फ्लोट्स , इनट्स , लॉन्ग और स्ट्रिंग्स शामिल हैं

जब हम कुछ डेटा को सहेजना चाहते हैं, जो कि पूरे एप्लिकेशन तक पहुंच योग्य है, तो एक तरीका यह है कि इसे ग्लोबल वैरिएबल में सेव किया जाए। लेकिन आवेदन बंद होने के बाद यह गायब हो जाएगा। एक और अनुशंसित तरीका है, जिसमें बचत करना है SharedPreference। SharedPreferences फ़ाइल में सहेजा गया डेटा पूरे एप्लिकेशन तक पहुंच योग्य है और एप्लिकेशन के बंद होने या रिबूट के बाद भी बना रहता है।

SharedPreferences कुंजी-मूल्य जोड़ी में डेटा को बचाता है और उसी फैशन में पहुँचा जा सकता है।

आप ऑब्जेक्ट बना सकते हैं SharedPreferences दो तरीकों उपयोग करके ,

1)। getSaringPreferences () : इस विधियों का उपयोग करके आप अपने नाम के पहले मापदंडों को कई SharedPreferences.and बना सकते हैंSharedPreferences

2)। getPreferences () : इस विधि का उपयोग करके आप सिंगल बना सकते हैं SharedPreferences

आकड़ो का भंडारण किया जा रहा हैं

एक चर घोषणा जोड़ें / वरीयता फ़ाइल बनाएँ

public static final String PREFERENCES_FILE_NAME = "MyAppPreferences";

फ़ाइल नाम पर एक पुनः प्राप्त करें (getSaringPreferences का उपयोग करके)

SharedPreferences settingsfile= getSharedPreferences(PREFERENCES_FILE_NAME,0);

संपादक खोलें और कुंजी-मूल्य जोड़े जोड़ें

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()जैसा कि ऊपर दिखाया गया है, का उपयोग करना / सहेजना न भूलें ।

डाटा लिया जा रहा है

 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();
}

}

**** मूल्य का उपयोग करने के लिए वरीयताएँ का उपयोग करें: - ****

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

**** उपयोग के लिए प्राथमिकताएँ पढ़ें मूल्य का उपयोग करें: - ****

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

7

बनाने SharedPreferenceऔर वैश्विक उपयोग के लिए सबसे अच्छा तरीका है कि आपको नीचे एक वर्ग बनाने की आवश्यकता है:

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();
    }

}


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

साझा प्राथमिकताएं लिखें

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

साझा प्राथमिकताएं पढ़ें

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);

GetSaredPreferences ("MyPref", MODE_PRIVATE) का उपयोग करें; इसके बजाय: getPreferences (Context.MODE_PRIVATE); क्योंकि डेटा केवल उस गतिविधि के लिए मान्य होगा जिस पर आप हैं। ऐसा इसलिए है क्योंकि इस गतिविधि में फ़ाइल का नाम गतिविधि के नाम पर है और इसलिए यदि आप किसी अन्य गतिविधि से इस प्राथमिकता को कॉल करते हैं तो डेटा अलग होगा।
15:44 पर गाइ4444

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
ढेर अतिप्रवाह में आपका स्वागत है! कृपया बताएं कि आपके द्वारा प्रदान किए गए कोड का उपयोग कैसे करें और यह क्यों काम करता है। धन्यवाद!
intcreator

0

आप इस उद्देश्य के लिए लिखी गई एक पिछली नमूना परियोजना पर भी नज़र डाल सकते हैं । मैं स्थानीय रूप से एक नाम बचाता है और इसे उपयोगकर्ता के अनुरोध पर या जब ऐप शुरू होता है तब इसे पुनः प्राप्त करता है।

लेकिन, इस समय, डेटा को बनाए रखने के लिए commit(इसके बजाय apply) का उपयोग करना बेहतर होगा । अधिक जानकारी यहाँ


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

साझा प्राथमिकताएं सीखना आसान है, इसलिए साझाकरण के बारे में इस सरल ट्यूटोरियल पर एक नज़र डालें

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);

    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.