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";
Ответы
Ответ 1
Я решил это!
Это не сработало, когда я назвал методы из класса! По какой-то причине мне пришлось вызвать его из другого класса и написать "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();
Ответ 2
Чтобы сохранить настройки:
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()
, - это если вам требуется возвращаемое значение, что очень редко.
Ответ 3
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");
}
Ответ 4
Если вам не нужно возвращать значение commit() лучше использовать apply(), поскольку он является асинхронным быстрее, чем commit().
final SharedPreferences prefs = context.getSharedPreferences("PREFERENCE_NAME",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", "value");
editor.apply();
По docs
В отличие от commit(), который синхронно записывает свои предпочтения в постоянное хранилище, apply() немедленно выполняет свои изменения в операциях SharedPreferences в памяти, но начинает асинхронную фиксацию на диск, и вы не будете уведомлены о каких-либо сбоях. Если другой редактор этой SharedPreferences выполняет регулярную фиксацию(), а apply() все еще неактивен, commit() будет блокироваться до тех пор, пока все асинхронные транзакции не будут завершены, а также сам commit.
Ответ 5
попробуйте с контекстом:
final SharedPreferences settings = context.getSharedPreferences(
PREFS_NAME, 0);
return settings.getString(key, null);
Ответ 6
Класс 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();