Intereting Posts
Перенесите InputStream на другую службу (через границы процесса) с помощью ParcelFileDescriptor.createPipe (), которая не работает с «EBADF (Bad file number)» Как получить идентификатор проекта google и идентификатор приложения pushwoosh? Анимировать элементы списка в ListView Полезные классы в Android, AsyncTask и свободном соединении, пожалуйста, сообщите Установить цвет значка FAB Включить .so-библиотеку в apk в студии android Google Assistant SDK для интеграции в приложение Android, как создать программный треугольник и прямоугольник? Отключить диалоговое окно создания предупреждений из onpause Что такое «actionbar_background» и как его определить? Как протестировать корпоративное приложение Android на разных устройствах Кордова: не удалось скопировать файл на Android с помощью Cordova Jenkins email артефакт для каждой сборки Наилучшая практика: шаблон проектирования для 2D-навигации на экране HUD Как установить или получить доступ к sqlite3 из оболочки adb

Android – Сохранение / извлечение строк с использованием общих настроек

Как говорится в названии, я хочу сохранить и получить некоторые строки. Но мой код не будет проходить через первую строку, ни при извлечении, ни в хранении. Я попытался следовать этой ссылке: http://developer.android.com/guide/topics/data/data-storage.html

private void savepath(String pathtilsave, int i) { String tal = null; // doesn't go past the line below SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); tal = String.valueOf(i); editor.putString(tal, pathtilsave); editor.commit(); } 

И мой метод извлечения:

 public void getpaths() { String tal = null; // doesn't go past the line below SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); for (int i = 1; i <= lydliste.length - 1; i++) { tal = String.valueOf(i); String restoredText = settings.getString(tal, null); if (restoredText != null) { lydliste[i] = restoredText; } } } 

Lydliste – это статический массив строк. PREFS_NAME

 public static final String PREFS_NAME = "MyPrefsFile"; 

Чтобы сохранить настройки:

 PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL", "myStringToSave").apply(); 

Чтобы получить сохраненное предпочтение:

 PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL", "defaultStringIfNothingFound"); 

Где context – это ваш контекст.


Если вы получаете несколько значений, может быть более эффективным повторное использование одного и того же экземпляра.

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); String myStrValue = prefs.getString("MYSTRLABEL", "defaultStringIfNothingFound"); Boolean myBoolValue = prefs.getBoolean("MYBOOLLABEL", false); int myIntValue = prefs.getInt("MYINTLABEL", 1); 

И если вы сохраняете несколько значений:

 Editor prefEditor = PreferenceManager.getDefaultSharedPreferences(context).edit(); prefEditor.putString("MYSTRLABEL", "myStringToSave"); prefEditor.putBoolean("MYBOOLLABEL", true); prefEditor.putInt("MYINTLABEL", 99); prefEditor.apply(); 

Примечание. Сохранение с помощью apply() лучше, чем использование commit() . Единственный раз, когда вам нужно commit() – это если вам требуется возвращаемое значение, что очень редко.

 private static final String PREFS_NAME = "preferenceName"; public static boolean setPreference(Context context, String key, String value) { SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); editor.putString(key, value); return editor.commit(); } public static String getPreference(Context context, String key) { SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); return settings.getString(key, "defaultValue"); } 

Я решил это! Это не сработало, когда я назвал методы из класса! По какой-то причине мне пришлось вызвать его из другого класса и написать «classname.this» в качестве параметра Context. Вот заключительная работа:

 SharedPreferences settings = ctx.getSharedPreferences(PREFS_NAME, 0); settings = ctx.getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString(tal, pathtilsave); editor.commit(); 

Если вам не нужно возвращать значение commit (), лучше использовать apply (), поскольку он асинхронен быстрее, чем commit () .

 final SharedPreferences prefs = context.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); editor.putString("key", "value"); editor.apply(); 

Согласно документам

В отличие от commit (), который синхронно записывает свои предпочтения в постоянное хранилище, apply () немедленно выполняет свои изменения в операциях SharedPreferences в памяти, но запускает асинхронную фиксацию на диск, и вы не будете уведомлены о каких-либо сбоях. Если другой редактор в этой SharedPreferences выполняет регулярную фиксацию (), а apply () все еще неактивен, commit () будет блокироваться до тех пор, пока все транзакции async не будут завершены, а также сам commit.

Попробуйте с контекстом:

 final SharedPreferences settings = context.getSharedPreferences( PREFS_NAME, 0); return settings.getString(key, null); 

Класс SharedPreferences позволяет сохранять настройки, специфичные для приложения Android.

В API версии 11 были введены методы putStringSet и getStringSet, которые позволяют разработчику сохранять список строковых значений и получать список строковых значений соответственно.

Пример хранения массива строк с использованием SharedPreferences может быть выполнен следующим образом:

 // Get the current list. SharedPreferences settings = this.getSharedPreferences("YourActivityPreferences", Context.MODE_PRIVATE); SharedPreferences.Editor editor = settings.edit(); Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>()); // Add the new value. myStrings.add("Another string"); // Save the list. editor.putStringSet("myStrings", myStrings); editor.commit();