Intereting Posts
Отладочный ключ Android? Форматирование JSON Body для дооснащения из однострочного значения без модели Как сделать статическую кнопку под ScrollView? Диалоговое окно или форму, где пользователь может выбрать ввод данных или отмену Прокрутка SwipeRefreshLayout с помощью RecyclerView Обновить в любом месте Android 2.2 Как разблокировать телефон Android через код удаленно Java.lang.NoClassDefFoundError: сбой разрешения: Lorg / jacoco / agent / rt / internal_773e439 / Offline; Сбой приложения при использовании обратного вызова Retrofit в режиме отладки Изменение динамического разрешения Android-маршара убивает все процессы приложений Есть ли простой способ получить уведомление об авторских правах, автоматически добавленное студией Android? Список RecyclerView с элементами с границами под углом, а не по горизонтали Изменение выхода камеры с использованием SurfaceTexture и OpenGL Заполнение TableLayout с помощью android: layout_weight программно Добавить ярлык запуска приложения в Eclipse? Прочтите CSV по очереди в Котлине

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