Подтвердить что ты не робот

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";
4b9b3361

Ответ 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();