Preferensi Bersama Android untuk membuat aktivitas satu kali (contoh) [ditutup]

295

Saya memiliki tiga aktivitas A, B dan C di mana A dan B adalah formulir dan setelah mengisi dan menyimpan data formulir dalam database (SQLITE). Saya menggunakan maksud dari A ke B dan kemudian B ke C. Apa yang saya inginkan adalah bahwa setiap kali saya membuka aplikasi, saya ingin C sebagai layar beranda dan bukan A dan B lagi.

Saya kira preferensi bersama akan berfungsi untuk ini, tetapi saya tidak dapat menemukan contoh yang baik untuk memberi saya tempat awal. Bantuan apa pun akan dihargai.

pengguna3104719
sumber
10
Menggunakan Preferensi Bersama dari situs Android dev.
Onik
1
Apakah Anda melihat tutorial Resmi di developer.android.com/guide/topics/data/data-storage.html#pref ?
AxiomaticNexus
12
Saya memberikan suara untuk membuka kembali pertanyaan ini karena tidak benar-benar meminta rekomendasi.
Suragch

Jawaban:

620

Nilai pengaturan dalam Preferensi:

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

Ambil data dari preferensi:

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.

Info lebih lanjut:

Menggunakan Preferensi Bersama

Preferensi Bersama

Jorgesys
sumber
74
Pertimbangkan untuk menggunakan apply () sebagai gantinya; komit menulis datanya ke penyimpanan persisten segera, sedangkan berlaku akan menanganinya di latar belakang.
CodeNinja
12
apply()adalah panggilan asinkron untuk menjalankan disk I / O di mana as commit()sinkron. Jadi hindari menelepon commit()dari utas UI.
Aniket Thakur
103

Buat SharedPreferences

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

Menyimpan data sebagai pasangan KUNCI / VALUE

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

Dapatkan data SharedPreferences

// Jika nilai untuk kunci tidak ada maka kembalikan nilai param kedua - Dalam hal ini nol

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

Menghapus nilai kunci dari 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

Hapus semua data dari SharedPreferences

 editor.clear();
 editor.apply(); // commit changes
Krausz Lóránt Szilveszter
sumber
3
pref.getBoolean ("key_name1", null); itu tidak bisa menjadi nol. Perlu nilai defalut jika tidak ada yang disimpan.
Boris Karloff
2
Anda sebaiknya menggunakan apply () daripada commit (). apply () asynchronous dan Anda akan menjalankannya di utas latar
Androider
Akan macet jika key_name3 atau key_name4 adalah null
TacB0sS
1
Saya memiliki halaman register yang menyimpan informasi pengguna dan saya memiliki halaman login yang pengguna masuk dengan informasi itu. Saya memiliki dua kelas, saya mengambil informasi satu kelas dan saya ingin menggunakan informasi itu kelas lain. Ketika saya menggunakan kode di atas dalam kode saya. Saya mengambil pengecualian null pointer. Apakah ada penggunaan seperti saya? @ KrauszLórántSzilveszter
ZpCikTi
43

Bagaimana cara menginternalisasi?

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

Editor editor = pref.edit();

Bagaimana Cara Menyimpan Data Dalam Preferensi Bersama?

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

ATAU

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

Dan jangan lupa untuk mendaftar:

editor.apply();

Bagaimana cara mengambil Data Dari Preferensi Bersama?

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

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

Semoga ini bisa membantu Anda :)

Omi Sparky
sumber
Inisialisasi ini penting jika Anda mengakses kelas aktivitas, fragmen, atau publik
DragonFire
19

Anda dapat membuat kelas SharedPreference kustom Anda

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

Anda bisa mendapatkan contoh YourPrefrence seperti:

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

String value = yourPreference.getData(YOUR_KEY);
Rahul Parihar
sumber
1
Nilai string = yourPreference.getData (YOUR_KEY); Kesalahan: konten statis tidak dapat dirujuk dalam konteks statis
Jana Babu
hai instance dari Context memberi saya null jadi saya telah putt sharedPreferences = context.getSharedPreferences ("YourCustomNamedPreference", Context.MODE_PRIVATE); baris ini di coba tangkap blok dan kerjanya tetapi masalahnya adalah mengapa itu memberikan nol?
Ionic
Saya menggunakan kelas ini dalam proyek saya dan init preferensi bersama saya di BaseActivity, dan digunakan dalam aktivitas lain (splashScreen & login & aktivitas utama) untuk memeriksa status login pengguna dan keluar dari aplikasi. Tapi ini tidak berfungsi untuk Android 8 untuk keluar! Apakah Anda punya saran?
roghayeh hosseini
17

Saya hanya menemukan semua contoh di atas terlalu membingungkan, jadi saya menulis sendiri. Fragmen kode baik-baik saja jika Anda tahu apa yang Anda lakukan, tetapi bagaimana dengan orang-orang seperti saya yang tidak?

Ingin solusi cut-n-paste saja? Nah ini dia!

Buat file java baru dan beri nama Keystore. Kemudian rekatkan dalam kode ini:

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

Sekarang simpan file itu dan lupakan. Anda sudah selesai dengan itu. Sekarang kembali ke aktivitas Anda dan gunakan seperti ini:

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);
    }
}
RM
sumber
Saya menggunakan kelas ini dalam proyek saya dan init preferensi bersama saya di BaseActivity, dan digunakan dalam aktivitas lain (splashScreen & login & aktivitas utama) untuk memeriksa status login pengguna dan keluar dari aplikasi. Tapi ini tidak berfungsi untuk Android 8 untuk keluar! Apakah Anda punya saran?
roghayeh hosseini
15

Shared Preferencesadalah file XML untuk menyimpan data primitif pribadi dalam pasangan nilai kunci. Tipe Data termasuk Booleans , float , ints , longs , dan string .

Ketika kami ingin menyimpan beberapa data yang dapat diakses di seluruh aplikasi, salah satu cara untuk melakukannya adalah menyimpannya dalam variabel global. Tapi itu akan hilang begitu aplikasi ditutup. Cara lain dan yang disarankan adalah menyimpan SharedPreference. Data yang disimpan dalam file SharedPreferences dapat diakses di seluruh aplikasi dan tetap ada bahkan setelah aplikasi ditutup atau saat reboot.

SharedPreferences menyimpan data dalam pasangan nilai kunci dan dapat diakses dengan cara yang sama.

Anda dapat membuat Obyek SharedPreferencesmenggunakan dua metode,

1). getSharedPreferences () : Dengan menggunakan metode ini Anda dapat membuat Multiple SharedPreferences.dan parameter pertamanya atas nama SharedPreferences.

2). getPreferences () : Menggunakan metode ini Anda dapat membuat Single SharedPreferences.

Menyimpan Data

Tambahkan deklarasi Variabel / Buat File Preferensi

public static final String PREFERENCES_FILE_NAME = "MyAppPreferences";

Ambil pegangan untuk nama file (menggunakan getSharedPreferences)

SharedPreferences settingsfile= getSharedPreferences(PREFERENCES_FILE_NAME,0);

Buka Editor dan Tambahkan pasangan nilai kunci

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

Jangan lupa untuk menerapkan / menyimpan menggunakan myeditor.apply()seperti yang ditunjukkan di atas.

Mengambil Data

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

}

**** Gunakan Preferensi untuk Menulis nilai menggunakan: - ****

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

**** Gunakan Preferensi untuk Membaca nilai menggunakan: - ****

Preferences.readString(getApplicationContext(), Preferences.NAME,
                    "");
smit modi
sumber
7

Cara terbaik untuk membuat SharedPreferencedan untuk penggunaan global Anda perlu membuat kelas seperti di bawah ini:

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

}
varotariya vajsi
sumber
PreferenceManager.getDefaultSharedPreferences sudah tidak digunakan lagi
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;
}
Chirag RAmi
sumber
3

Menulis ke Preferensi Bersama

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

Baca dari Preferensi Bersama

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);
Syed Junaid
sumber
Gunakan getSharedPreferences ("MyPref", MODE_PRIVATE); alih-alih: getPreferences (Context.MODE_PRIVATE); Karena data hanya akan valid untuk aktivitas Anda. Ini karena dalam aktivitas ini nama file ada pada nama aktivitas dan jadi jika Anda memanggil preferensi ini dari aktivitas lain datanya akan berbeda.
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", "");
shweta c
sumber
0
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();
Syed Junaid
sumber
3
Selamat Datang di Stack Overflow! Tolong jelaskan bagaimana cara menggunakan kode yang Anda berikan dan mengapa ia bekerja. Terima kasih!
intcreator
0

Anda juga bisa melihat pada contoh proyek sebelumnya saya , yang ditulis untuk tujuan ini. Saya menyimpan nama secara lokal dan mengambilnya baik atas permintaan pengguna atau ketika aplikasi dimulai.

Tetapi, pada saat ini, akan lebih baik menggunakan commit(bukan apply) untuk mempertahankan data. Info lebih lanjut di sini .

thodorisbais
sumber
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"); 
                 }
Nadeem Abbas
sumber
0

Preferensi Bersama sangat mudah dipelajari, jadi lihatlah tutorial sederhana ini tentang preferensipenggunaan bersama

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

    }
}
dondondon
sumber