Как использовать SharedPreferences в Android для хранения, извлечения и редактирования значений [закрыт]
Я хочу сохранить значение времени и нужно получить и отредактировать его. Как я могу использовать SharedPreferences
для этого?
30 ответов:
чтобы получить общие настройки, используйте следующий метод В вашей деятельности:
SharedPreferences prefs = this.getSharedPreferences( "com.example.app", Context.MODE_PRIVATE);
чтобы прочитать настройки:
String dateTimeKey = "com.example.app.datetime"; // use a default value using new Date() long l = prefs.getLong(dateTimeKey, new Date().getTime());
для редактирования и сохранения настроек
Date dt = getSomeDate(); prefs.edit().putLong(dateTimeKey, dt.getTime()).apply();
пример каталога Android sdk содержит пример извлечения и хранения общих настроек. Он расположен в:
<android-sdk-home>/samples/android-<platformversion>/ApiDemos directory
Edit==>
я заметил, что важно написать разницу между
commit()
иapply()
здесь также.
commit()
возвращениеtrue
если значение сохранено успешно, в противном случаеfalse
. Он сохраняет значения в SharedPreferences синхронно.
apply()
был добавлен в 2.3 и не возвращает никакого значения ни на успех, ни на неудачу. Он сохраняет значения в SharedPreferences немедленно, но запускает асинхронные совершал. Более подробно это здесь.
для хранения значений в общих настройках:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = preferences.edit(); editor.putString("Name","Harneet"); editor.apply();
для получения значений из общих настроек:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); String name = preferences.getString("Name", ""); if(!name.equalsIgnoreCase("")) { name = name + " Sethi"; /* Edit the value here*/ }
до edit данные
sharedpreference
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); editor.putString("text", mSaved.getText().toString()); editor.putInt("selection-start", mSaved.getSelectionStart()); editor.putInt("selection-end", mSaved.getSelectionEnd()); editor.apply();
до извлечь данные
sharedpreference
SharedPreferences prefs = getPreferences(MODE_PRIVATE); String restoredText = prefs.getString("text", null); if (restoredText != null) { //mSaved.setText(restoredText, TextView.BufferType.EDITABLE); int selectionStart = prefs.getInt("selection-start", -1); int selectionEnd = prefs.getInt("selection-end", -1); /*if (selectionStart != -1 && selectionEnd != -1) { mSaved.setSelection(selectionStart, selectionEnd); }*/ }
Edit
Я взял этот фрагмент из демонстрационного образца API. У него был
Написать :
SharedPreferences preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_WORLD_WRITEABLE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("Authentication_Id",userid.getText().toString()); editor.putString("Authentication_Password",password.getText().toString()); editor.putString("Authentication_Status","true"); editor.apply();
Читать :
SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE); String Astatus = prfs.getString("Authentication_Status", "");
самый простой способ:
сохранить:
getPreferences(MODE_PRIVATE).edit().putString("Name of variable",value).commit();
для получения:
your_variable = getPreferences(MODE_PRIVATE).getString("Name of variable",default value);
установка значений в предпочтении:
// 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.commit();
получить данные из предпочтения:
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); String restoredText = prefs.getString("text", null); if (restoredText != null) { 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. }
подробнее:
для хранения информации
SharedPreferences preferences = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("username", username.getText().toString()); editor.putString("password", password.getText().toString()); editor.putString("logged", "logged"); editor.commit();
изменить настройки
SharedPreferences.Editor editor = preferences.edit(); editor.clear(); editor.commit();
Если вы делаете большое приложение с другими разработчиками в вашей команде и намерены иметь все хорошо организовано без разбросанного кода или различных экземпляров SharedPreferences, вы можете сделать что-то вроде этого:
//SharedPreferences manager class public class SharedPrefs { //SharedPreferences file name private static String SHARED_PREFS_FILE_NAME = "my_app_shared_prefs"; //here you can centralize all your shared prefs keys public static String KEY_MY_SHARED_BOOLEAN = "my_shared_boolean"; public static String KEY_MY_SHARED_FOO = "my_shared_foo"; //get the SharedPreferences object instance //create SharedPreferences file if not present private static SharedPreferences getPrefs(Context context) { return context.getSharedPreferences(SHARED_PREFS_FILE_NAME, Context.MODE_PRIVATE); } //Save Booleans public static void savePref(Context context, String key, boolean value) { getPrefs(context).edit().putBoolean(key, value).commit(); } //Get Booleans public static boolean getBoolean(Context context, String key) { return getPrefs(context).getBoolean(key, false); } //Get Booleans if not found return a predefined default value public static boolean getBoolean(Context context, String key, boolean defaultValue) { return getPrefs(context).getBoolean(key, defaultValue); } //Strings public static void save(Context context, String key, String value) { getPrefs(context).edit().putString(key, value).commit(); } public static String getString(Context context, String key) { return getPrefs(context).getString(key, ""); } public static String getString(Context context, String key, String defaultValue) { return getPrefs(context).getString(key, defaultValue); } //Integers public static void save(Context context, String key, int value) { getPrefs(context).edit().putInt(key, value).commit(); } public static int getInt(Context context, String key) { return getPrefs(context).getInt(key, 0); } public static int getInt(Context context, String key, int defaultValue) { return getPrefs(context).getInt(key, defaultValue); } //Floats public static void save(Context context, String key, float value) { getPrefs(context).edit().putFloat(key, value).commit(); } public static float getFloat(Context context, String key) { return getPrefs(context).getFloat(key, 0); } public static float getFloat(Context context, String key, float defaultValue) { return getPrefs(context).getFloat(key, defaultValue); } //Longs public static void save(Context context, String key, long value) { getPrefs(context).edit().putLong(key, value).commit(); } public static long getLong(Context context, String key) { return getPrefs(context).getLong(key, 0); } public static long getLong(Context context, String key, long defaultValue) { return getPrefs(context).getLong(key, defaultValue); } //StringSets public static void save(Context context, String key, Set<String> value) { getPrefs(context).edit().putStringSet(key, value).commit(); } public static Set<String> getStringSet(Context context, String key) { return getPrefs(context).getStringSet(key, null); } public static Set<String> getStringSet(Context context, String key, Set<String> defaultValue) { return getPrefs(context).getStringSet(key, defaultValue); } }
В вашей деятельности вы можете сохранить SharedPreferences таким образом
//saving a boolean into prefs SharedPrefs.savePref(this, SharedPrefs.KEY_MY_SHARED_BOOLEAN, booleanVar);
и вы можете получить ваши SharedPreferences таким образом
//getting a boolean from prefs booleanVar = SharedPrefs.getBoolean(this, SharedPrefs.KEY_MY_SHARED_BOOLEAN);
Одноэлементный Общий Класс Предпочтений. это может помочь другим в будущем.
import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; public class SharedPref { private static SharedPreferences mSharedPref; public static final String NAME = "NAME"; public static final String AGE = "AGE"; public static final String IS_SELECT = "IS_SELECT"; private SharedPref() { } public static void init(Context context) { if(mSharedPref == null) mSharedPref = context.getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE); } public static String read(String key, String defValue) { return mSharedPref.getString(key, defValue); } public static void write(String key, String value) { SharedPreferences.Editor prefsEditor = mSharedPref.edit(); prefsEditor.putString(key, value); prefsEditor.commit(); } public static boolean read(String key, boolean defValue) { return mSharedPref.getBoolean(key, defValue); } public static void write(String key, boolean value) { SharedPreferences.Editor prefsEditor = mSharedPref.edit(); prefsEditor.putBoolean(key, value); prefsEditor.commit(); } public static Integer read(String key, int defValue) { return mSharedPref.getInt(key, defValue); } public static void write(String key, Integer value) { SharedPreferences.Editor prefsEditor = mSharedPref.edit(); prefsEditor.putInt(key, value).commit(); } }
просто позвоните SharedPref.init () on MainActivity once
SharedPref.init(getApplicationContext());
для записи данных
SharedPref.write(SharedPref.NAME, "XXXX");//save string in shared preference. SharedPref.write(SharedPref.AGE, 25);//save int in shared preference. SharedPref.write(SharedPref.IS_SELECT, true);//save boolean in shared preference.
Читать Данные
String name = SharedPref.read(SharedPref.NAME, null);//read string in shared preference. int age = SharedPref.read(SharedPref.AGE, 0);//read int in shared preference. boolean isSelect = SharedPref.read(SharedPref.IS_SELECT, false);//read boolean in shared preference.
в любом приложении, есть настройки по умолчанию, которые могут попасть через
PreferenceManager
экземпляр и связанный с ним методgetDefaultSharedPreferences(Context)
.С
SharedPreference
экземпляр можно получить значение int любого предпочтения с помощью getInt (String key, int defVal). Предпочтение, которое нас интересует в этом случае, является встречным .в нашем случае, мы можем изменить
SharedPreference
экземпляр в нашем случае с помощью edit () и использоватьputInt(String key, int newVal)
мы увеличили количество для нашего приложения, которое присутствует за пределами приложения и отображается соответственно.для дальнейшей демонстрации этого, перезагрузите и Вы приложение снова, вы заметите, что количество будет увеличиваться каждый раз, когда вы перезапускаете приложение.
PreferencesDemo.java
код:
package org.example.preferences; import android.app.Activity; import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.widget.TextView; public class PreferencesDemo extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Get the app's shared preferences SharedPreferences app_preferences = PreferenceManager.getDefaultSharedPreferences(this); // Get the value for the run counter int counter = app_preferences.getInt("counter", 0); // Update the TextView TextView text = (TextView) findViewById(R.id.text); text.setText("This app has been started " + counter + " times."); // Increment the counter SharedPreferences.Editor editor = app_preferences.edit(); editor.putInt("counter", ++counter); editor.commit(); // Very important } }
главная.xml
код:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:id="@+id/text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>
простое решение о том, как сохранить значение входа в систему с помощью
SharedPreferences
.вы можете продлить
MainActivity
класс или другой класс, где вы будете хранить "значение того, что вы хотите сохранить". Поместите это в классы писателя и читателя:public static final String GAME_PREFERENCES_LOGIN = "Login";
здесь
InputClass
вход иOutputClass
тип выхода, соответственно.// This is a storage, put this in a class which you can extend or in both classes: //(input and output) public static final String GAME_PREFERENCES_LOGIN = "Login"; // String from the text input (can be from anywhere) String login = inputLogin.getText().toString(); // then to add a value in InputCalss "SAVE", SharedPreferences example = getSharedPreferences(GAME_PREFERENCES_LOGIN, 0); Editor editor = example.edit(); editor.putString("value", login); editor.commit();
теперь вы можете использовать его где-то еще, как и другие классы. Ниже приводится
OutputClass
.SharedPreferences example = getSharedPreferences(GAME_PREFERENCES_LOGIN, 0); String userString = example.getString("value", "defValue"); // the following will print it out in console Logger.getLogger("Name of a OutputClass".class.getName()).log(Level.INFO, userString);
хранить в SharedPreferences
SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE); Editor editor = preferences.edit(); editor.putString("name", name); editor.commit();
Fetch в SharedPreferences
SharedPreferences preferences=getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE); String name=preferences.getString("name",null);
Примечание:" temp "- это имя sharedpreferences, а" name " - входное значение. если значение не выходит, то возвращает null
редактировать
SharedPreferences pref = getSharedPreferences("YourPref", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("yourValue", value); editor.commit();
читать
SharedPreferences pref = getSharedPreferences("YourPref", MODE_PRIVATE); value= pref.getString("yourValue", "");
основная идея SharedPreferences это для хранения вещей в XML-файле.
объявите свой путь к xml-файлу.(если у вас нет этого файла, Android создаст его. Если у вас есть этот файл, Android получит к нему доступ.)
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
записать значение в Общие настройки
prefs.edit().putLong("preference_file_key", 1010101).apply();
the
preference_file_key
- это имя общих файлов предпочтений. А то1010101
это значение, которое вам нужно сохранить.
apply()
наконец, чтобы сохранить изменения. Если вы получаете ошибку отapply()
меняем наcommit()
. Так что это альтернативное предложениеprefs.edit().putLong("preference_file_key", 1010101).commit();
читать из общих предпочтений
SharedPreferences sp = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); long lsp = sp.getLong("preference_file_key", -1);
lsp
будет-1
еслиpreference_file_key
не имеет значения. Если 'preference_file_key' имеет значение,он вернет значение этого.весь код писать
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); // Declare xml file prefs.edit().putLong("preference_file_key", 1010101).apply(); // Write the value to key.
код для чтения это
SharedPreferences sf = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); // Declare xml file long lsp = sp.getLong("preference_file_key", -1); // Read the key and store in lsp
вы можете сохранить значение с помощью этого метода:
public void savePreferencesForReasonCode(Context context, String key, String value) { SharedPreferences sharedPreferences = PreferenceManager .getDefaultSharedPreferences(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(key, value); editor.commit(); }
и с помощью этого метода вы можете получить значение из SharedPreferences:
public String getPreferences(Context context, String prefKey) { SharedPreferences sharedPreferences = PreferenceManager .getDefaultSharedPreferences(context); return sharedPreferences.getString(prefKey, ""); }
здесь
prefKey
это ключ, который вы использовали для сохранения определенного значения. Спасибо.
editor.putString("text", mSaved.getText().toString());
здесь
mSaved
может бытьTextView
илиEditText
откуда мы можем извлечь строку. вы можете просто указать строку. Здесь текст будет ключом, который содержит значение, полученное изmSaved
(TextView
илиEditText
).SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
также нет необходимости сохранять файл предпочтений, используя имя пакета, т. е. " com.образец.приложение." Вы можете указать предпочтительное имя. Надеюсь, это поможет !
Лучшая практика-нибудь
создать интерфейс им с PreferenceManager:
// Interface to save values in shared preferences and also for retrieve values from shared preferences public interface PreferenceManager { SharedPreferences getPreferences(); Editor editPreferences(); void setString(String key, String value); String getString(String key); void setBoolean(String key, boolean value); boolean getBoolean(String key); void setInteger(String key, int value); int getInteger(String key); void setFloat(String key, float value); float getFloat(String key); }
как использовать активность/фрагмент:
public class HomeActivity extends AppCompatActivity implements PreferenceManager{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout_activity_home); } @Override public SharedPreferences getPreferences(){ return getSharedPreferences("SP_TITLE", Context.MODE_PRIVATE); } @Override public SharedPreferences.Editor editPreferences(){ return getPreferences().edit(); } @Override public void setString(String key, String value) { editPreferences().putString(key, value).commit(); } @Override public String getString(String key) { return getPreferences().getString(key, ""); } @Override public void setBoolean(String key, boolean value) { editPreferences().putBoolean(key, value).commit(); } @Override public boolean getBoolean(String key) { return getPreferences().getBoolean(key, false); } @Override public void setInteger(String key, int value) { editPreferences().putInt(key, value).commit(); } @Override public int getInteger(String key) { return getPreferences().getInt(key, 0); } @Override public void setFloat(String key, float value) { editPreferences().putFloat(key, value).commit(); } @Override public float getFloat(String key) { return getPreferences().getFloat(key, 0); } }
Примечание: замените ключ SharedPreference на SP_TITLE.
примеры:
хранить строку на shareperence:
setString("my_key", "my_value");
получить строку С shareperence:
String strValue = getString("my_key");
надеюсь, что это поможет вам.
сохранить
PreferenceManager.getDefaultSharedPreferences(this).edit().putString("VarName","your value").apply();
для поиска :
String name = PreferenceManager.getDefaultSharedPreferences(this).getString("VarName","defaultValue");
значение по умолчанию : значения для возврата, если этот параметр не существует.
вы можете изменить "этой" С getActivity() или getApplicationContext() in некоторые случаи
есть много способов, которые люди рекомендуют использовать SharedPreferences. Я сделал демо-проект здесь. Ключевым моментом в примере является использование ApplicationContext & single sharedpreferences object. Это демонстрирует, как использовать SharedPreferences со следующими характеристиками:-
- использование класса singelton для доступа / обновления SharedPreferences
- не нужно передавать контекст всегда для чтения/записи SharedPreferences
- он использует apply () вместо commit ()
- apply () является асинхронным сохранением, ничего не возвращает, сначала он обновляет значение в памяти , а изменения записываются на диск позже асинхронно.
- commit () - это synchronus save, он возвращает true/false на основе результата. Изменения записываются на диск синхронно
- работает на Android 2.3+ версии
пример использования в качестве ниже:-
MyAppPreference.getInstance().setSampleStringKey("some_value"); String value= MyAppPreference.getInstance().getSampleStringKey();
получить исходный код здесь & Подробные API можно найти здесь on developer.android.com
Use использовал этот пример простой и понятный и проверенный
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.sairamkrishna.myapplication" > <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
public class MainActivity extends AppCompatActivity { EditText ed1,ed2,ed3; Button b1; public static final String MyPREFERENCES = "MyPrefs" ; public static final String Name = "nameKey"; public static final String Phone = "phoneKey"; public static final String Email = "emailKey"; SharedPreferences sharedpreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ed1=(EditText)findViewById(R.id.editText); ed2=(EditText)findViewById(R.id.editText2); ed3=(EditText)findViewById(R.id.editText3); b1=(Button)findViewById(R.id.button); sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String n = ed1.getText().toString(); String ph = ed2.getText().toString(); String e = ed3.getText().toString(); SharedPreferences.Editor editor = sharedpreferences.edit(); editor.putString(Name, n); editor.putString(Phone, ph); editor.putString(Email, e); editor.commit(); Toast.makeText(MainActivity.this,"Thanks",Toast.LENGTH_LONG).show(); } }); } }
для хранения значений в общих настройках:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = sp.edit(); editor.putString("Name","Jayesh"); editor.commit();
для получения значений из общих настроек:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); String name = sp.getString("Name", ""); // Second parameter is the default value.
используя этот простая библиотека, вот как вы делаете вызовы SharedPreferences..
TinyDB tinydb = new TinyDB(context); tinydb.putInt("clickCount", 2); tinydb.putString("userName", "john"); tinydb.putBoolean("isUserMale", true); tinydb.putList("MyUsers", mUsersArray); tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap); //These plus the corresponding get methods are all Included
Я хотел добавить здесь, что большинство фрагментов для этого вопроса будет иметь что-то вроде MODE_PRIVATE при использовании SharedPreferences. Ну, MODE_PRIVATE означает, что все, что вы пишете в этом общем предпочтении, может быть прочитано только вашим приложением.
какой бы ключ вы ни передали методу getSharedPreferences (), android создает файл с этим именем и сохраняет в нем данные предпочтений. Также помните, что getSharedPreferences () предполагается использовать, когда вы собираетесь есть несколько файлов предпочтений для вашего приложения. Если вы собираетесь использовать один файл предпочтений и хранить в нем все пары ключ-значение, используйте метод getSharedPreference (). Его странно, почему все (включая меня) просто использует getsharedpreferences () аромат, даже не понимая разницы между этими двумя.
следующий видео-урок должен помочь https://www.youtube.com/watch?v=2PcAQ1NBy98
простой и беспроблемный::" Android-SharedPreferences-Helper " библиотека
лучше поздно, чем никогда: я создал библиотека "Android-SharedPreferences-Helper", чтобы помочь уменьшить сложность и усилия, используя
SharedPreferences
. Он также предоставляет некоторые расширенные функциональные возможности. Несколько вещей, которые он предлагает следующим образом:
- инициализация и настройка одной строки
- легко выбрать, следует ли использовать параметры по умолчанию или пользовательский файл предпочтений
- предопределенные (тип данных по умолчанию) и настраиваемые (что вы можете выбрать) значения по умолчанию для каждого типа данных
- возможность установить другое значение по умолчанию для однократного использования только с дополнительным параметром
- вы можете зарегистрировать и отменить регистрацию OnSharedPreferenceChangeListener, как и для класса по умолчанию
dependencies { ... ... compile(group: 'com.viralypatel.sharedpreferenceshelper', name: 'library', version: '1.1.0', ext: 'aar') }
объявление объекта SharedPreferencesHelper: (рекомендуется в классе уровень)
SharedPreferencesHelper sph;
создание экземпляра объекта SharedPreferencesHelper: (рекомендуется в метод onCreate ())
// use one of the following ways to instantiate sph = new SharedPreferencesHelper(this); //this will use default shared preferences sph = new SharedPreferencesHelper(this, "myappprefs"); // this will create a named shared preference file sph = new SharedPreferencesHelper(this, "myappprefs", 0); // this will allow you to specify a mode
ввод значений в общие предпочтения
довольно проста! В отличие от способа по умолчанию (при использовании класса SharedPreferences) вам не нужно будет вызывать
.edit()
и.commit()
когда-нибудь время.sph.putBoolean("boolKey", true); sph.putInt("intKey", 123); sph.putString("stringKey", "string value"); sph.putLong("longKey", 456876451); sph.putFloat("floatKey", 1.51f); // putStringSet is supported only for android versions above HONEYCOMB Set name = new HashSet(); name.add("Viral"); name.add("Patel"); sph.putStringSet("name", name);
вот именно! Ваши значения хранятся в общей папке предпочтения.
получение значений из общих предпочтений
опять же, только один простой вызов метода с именем ключа.
sph.getBoolean("boolKey"); sph.getInt("intKey"); sph.getString("stringKey"); sph.getLong("longKey"); sph.getFloat("floatKey"); // getStringSet is supported only for android versions above HONEYCOMB sph.getStringSet("name");
он имеет много других расширенных функций
проверить информацию о расширенных функциональных возможностей, использования и инструкция по установке и т. д. Страница Репозитория GitHub.
Я пишу вспомогательный класс для sharedpreferences:
import android.content.Context; import android.content.SharedPreferences; /** * Created by mete_ on 23.12.2016. */ public class HelperSharedPref { Context mContext; public HelperSharedPref(Context mContext) { this.mContext = mContext; } /** * * @param key Constant RC * @param value Only String, Integer, Long, Float, Boolean types */ public void saveToSharedPref(String key, Object value) throws Exception { SharedPreferences.Editor editor = mContext.getSharedPreferences(key, Context.MODE_PRIVATE).edit(); if (value instanceof String) { editor.putString(key, (String) value); } else if (value instanceof Integer) { editor.putInt(key, (Integer) value); } else if (value instanceof Long) { editor.putLong(key, (Long) value); } else if (value instanceof Float) { editor.putFloat(key, (Float) value); } else if (value instanceof Boolean) { editor.putBoolean(key, (Boolean) value); } else { throw new Exception("Unacceptable object type"); } editor.commit(); } /** * Return String * @param key * @return null default is null */ public String loadStringFromSharedPref(String key) throws Exception { SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE); String restoredText = prefs.getString(key, null); return restoredText; } /** * Return int * @param key * @return null default is -1 */ public Integer loadIntegerFromSharedPref(String key) throws Exception { SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE); Integer restoredText = prefs.getInt(key, -1); return restoredText; } /** * Return float * @param key * @return null default is -1 */ public Float loadFloatFromSharedPref(String key) throws Exception { SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE); Float restoredText = prefs.getFloat(key, -1); return restoredText; } /** * Return long * @param key * @return null default is -1 */ public Long loadLongFromSharedPref(String key) throws Exception { SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE); Long restoredText = prefs.getLong(key, -1); return restoredText; } /** * Return boolean * @param key * @return null default is false */ public Boolean loadBooleanFromSharedPref(String key) throws Exception { SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE); Boolean restoredText = prefs.getBoolean(key, false); return restoredText; } }
здесь я создал вспомогательный класс для использования настроек в android.
это вспомогательный класс:
public class PrefsUtil { public static SharedPreferences getPreference() { return PreferenceManager.getDefaultSharedPreferences(Applicatoin.getAppContext()); } public static void putBoolean(String key, boolean value) { getPreference().edit().putBoolean(key, value) .apply(); } public static boolean getBoolean(String key) { return getPreference().getBoolean(key, false); } public static void putInt(String key, int value) { getPreference().edit().putInt(key, value).apply(); } public static void delKey(String key) { getPreference().edit().remove(key).apply(); } }
для хранения и извлечения глобальных переменных в функции пути. Чтобы проверить, убедитесь, что у вас есть элементы Textview на странице, раскомментируйте две строки в коде и запустите. Затем снова прокомментируйте две строки и запустите.
Здесь идентификатор TextView-это имя пользователя и пароль.в каждом классе, где вы хотите использовать его, добавить эти две процедуры в конце. Я хотел бы, чтобы эта рутина была глобальной рутиной, но не знаю, как это сделать. Эта работа.
вариабели доступны повсюду. Он хранит переменные в "MyFile". Вы можете изменить его по-своему.
вы называете это помощью
storeSession("username","frans"); storeSession("password","!2#4%");***
переменная username будет заполнена "frans "и пароль с"!2#4%". Даже после перезагрузки они доступны.
и вы извлекаете его с помощью
password.setText(getSession(("password"))); usernames.setText(getSession(("username")));
ниже всего кода моей сетки.java
package nl.yentel.yenteldb2; import android.content.SharedPreferences; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class Grid extends AppCompatActivity { private TextView usernames; private TextView password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grid); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); getSupportActionBar().setDisplayHomeAsUpEnabled(true); ***// storeSession("username","frans.eilering@gmail.com"); //storeSession("password","mijn wachtwoord");*** password = (TextView) findViewById(R.id.password); password.setText(getSession(("password"))); usernames=(TextView) findViewById(R.id.username); usernames.setText(getSession(("username"))); } public void storeSession(String key, String waarde) { SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString(key, waarde); editor.commit(); } public String getSession(String key) { //http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146 SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); String output = pref.getString(key, null); return output; } }
ниже вы найдете элементы textview
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="usernames" android:id="@+id/username" android:layout_below="@+id/textView" android:layout_alignParentStart="true" android:layout_marginTop="39dp" android:hint="hier komt de username" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="password" android:id="@+id/password" android:layout_below="@+id/user" android:layout_alignParentStart="true" android:hint="hier komt het wachtwoord" />
Я создал вспомогательный класс, чтобы сделать мою жизнь легкой. Это универсальный класс и имеет много методов, которые обычно используются в приложениях, таких как общие настройки, срок действия электронной почты, формат даты и времени. Скопируйте этот класс в свой код и получите доступ к его методам везде, где вам нужно.
import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.SharedPreferences; import android.support.v4.app.FragmentActivity; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.Toast; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; /** * Created by Zohaib Hassan on 3/4/2016. */ public class Helper { private static ProgressDialog pd; public static void saveData(String key, String value, Context context) { SharedPreferences sp = context.getApplicationContext() .getSharedPreferences("appData", 0); SharedPreferences.Editor editor; editor = sp.edit(); editor.putString(key, value); editor.commit(); } public static void deleteData(String key, Context context){ SharedPreferences sp = context.getApplicationContext() .getSharedPreferences("appData", 0); SharedPreferences.Editor editor; editor = sp.edit(); editor.remove(key); editor.commit(); } public static String getSaveData(String key, Context context) { SharedPreferences sp = context.getApplicationContext() .getSharedPreferences("appData", 0); String data = sp.getString(key, ""); return data; } public static long dateToUnix(String dt, String format) { SimpleDateFormat formatter; Date date = null; long unixtime; formatter = new SimpleDateFormat(format); try { date = formatter.parse(dt); } catch (Exception ex) { ex.printStackTrace(); } unixtime = date.getTime(); return unixtime; } public static String getData(long unixTime, String formate) { long unixSeconds = unixTime; Date date = new Date(unixSeconds); SimpleDateFormat sdf = new SimpleDateFormat(formate); String formattedDate = sdf.format(date); return formattedDate; } public static String getFormattedDate(String date, String currentFormat, String desiredFormat) { return getData(dateToUnix(date, currentFormat), desiredFormat); } public static double distance(double lat1, double lon1, double lat2, double lon2, char unit) { double theta = lon1 - lon2; double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * Math.cos(deg2rad(theta)); dist = Math.acos(dist); dist = rad2deg(dist); dist = dist * 60 * 1.1515; if (unit == 'K') { dist = dist * 1.609344; } else if (unit == 'N') { dist = dist * 0.8684; } return (dist); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts decimal degrees to radians : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double deg2rad(double deg) { return (deg * Math.PI / 180.0); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ /* :: This function converts radians to decimal degrees : */ /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ private static double rad2deg(double rad) { return (rad * 180.0 / Math.PI); } public static int getRendNumber() { Random r = new Random(); return r.nextInt(360); } public static void hideKeyboard(Context context, EditText editText) { InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); } public static void showLoder(Context context, String message) { pd = new ProgressDialog(context); pd.setCancelable(false); pd.setMessage(message); pd.show(); } public static void showLoderImage(Context context, String message) { pd = new ProgressDialog(context); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setCancelable(false); pd.setMessage(message); pd.show(); } public static void dismissLoder() { pd.dismiss(); } public static void toast(Context context, String text) { Toast.makeText(context, text, Toast.LENGTH_LONG).show(); } /* public static Boolean connection(Context context) { ConnectionDetector connection = new ConnectionDetector(context); if (!connection.isConnectingToInternet()) { Helper.showAlert(context, "No Internet access...!"); //Helper.toast(context, "No internet access..!"); return false; } else return true; }*/ public static void removeMapFrgment(FragmentActivity fa, int id) { android.support.v4.app.Fragment fragment; android.support.v4.app.FragmentManager fm; android.support.v4.app.FragmentTransaction ft; fm = fa.getSupportFragmentManager(); fragment = fm.findFragmentById(id); ft = fa.getSupportFragmentManager().beginTransaction(); ft.remove(fragment); ft.commit(); } public static AlertDialog showDialog(Context context, String message) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setMessage(message); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { // TODO Auto-generated method stub } }); return builder.create(); } public static void showAlert(Context context, String message) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle("Alert"); builder.setMessage(message) .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); } }).show(); } public static boolean isURL(String url) { if (url == null) return false; boolean foundMatch = false; try { Pattern regex = Pattern .compile( "\b(?:(https?|ftp|file)://|www\.)?[-A-Z0-9+&#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]\.[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); Matcher regexMatcher = regex.matcher(url); foundMatch = regexMatcher.matches(); return foundMatch; } catch (PatternSyntaxException ex) { // Syntax error in the regular expression return false; } } public static boolean atLeastOneChr(String string) { if (string == null) return false; boolean foundMatch = false; try { Pattern regex = Pattern.compile("[a-zA-Z0-9]", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE); Matcher regexMatcher = regex.matcher(string); foundMatch = regexMatcher.matches(); return foundMatch; } catch (PatternSyntaxException ex) { // Syntax error in the regular expression return false; } } public static boolean isValidEmail(String email, Context context) { String expression = "^[\w\.-]+@([\w\-]+\.)+[A-Z]{2,4}$"; CharSequence inputStr = email; Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(inputStr); if (matcher.matches()) { return true; } else { // Helper.toast(context, "Email is not valid..!"); return false; } } public static boolean isValidUserName(String email, Context context) { String expression = "^[0-9a-zA-Z]+$"; CharSequence inputStr = email; Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(inputStr); if (matcher.matches()) { return true; } else { Helper.toast(context, "Username is not valid..!"); return false; } } public static boolean isValidDateSlash(String inDate) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy"); dateFormat.setLenient(false); try { dateFormat.parse(inDate.trim()); } catch (ParseException pe) { return false; } return true; } public static boolean isValidDateDash(String inDate) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy"); dateFormat.setLenient(false); try { dateFormat.parse(inDate.trim()); } catch (ParseException pe) { return false; } return true; } public static boolean isValidDateDot(String inDate) { SimpleDateFormat dateFormat = new SimpleDateFormat("dd.mm.yyyy"); dateFormat.setLenient(false); try { dateFormat.parse(inDate.trim()); } catch (ParseException pe) { return false; } return true; } }
для хранения значений в общих настройках:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences.Editor editor = sp.edit(); editor.putString("Name","Jayesh"); editor.commit();
для получения значений из общих настроек:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this); String name = sp.getString("Name", "");
SharedPreferences.Editor editor = getSharedPreferences("identifier", MODE_PRIVATE).edit(); //identifier is the unique to fetch data from your SharedPreference. editor.putInt("keyword", 0); // saved value place with 0. //use this "keyword" to fetch saved value again. editor.commit();//important line without this line your value is not stored in preference // fetch the stored data using .... SharedPreferences prefs = getSharedPreferences("identifier", MODE_PRIVATE); // here both identifier will same int fetchvalue = prefs.getInt("keyword", 0); // here keyword will same as used above. // 0 is default value when you nothing save in preference that time fetch value is 0.
вы должны использовать SharedPreferences в AdapterClass или любой другой. в тот раз просто используйте эту декларацию и используйте ту же задницу выше.
SharedPreferences.Editor editor = context.getSharedPreferences("idetifier", Context.MODE_PRIVATE).edit(); SharedPreferences prefs = context.getSharedPreferences("identifier", Context.MODE_PRIVATE); //here context is your application context
строка или логическое значение
editor.putString("stringkeyword", "your string"); editor.putBoolean("booleankeyword","your boolean value"); editor.commit();
выборка данных так же, как и выше
String fetchvalue = prefs.getString("keyword", ""); Boolean fetchvalue = prefs.getBoolean("keyword", "");