Общие настройки сохраняют и извлекают данные

Я использую общие настройки для сохранения данных из AutoCompleteTextView. Когда пользователь что-то пишет в этом AutoCompleteTextView, он может нажать кнопку, чтобы сохранить то, что он только что написал (чтобы ему не приходилось писать это каждый раз).

Вот как выглядит мой код:

private AutoCompleteTextView autoComplete = null;
String nameFile = "Web service data";
String myData = "";
SharedPreferences pref;
Editor editor;
String channel = "";
String[] valuesArray = {channel};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.fragment_main);

    pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
    editor = pref.edit();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, valuesArray);
    autoComplete = (AutoCompleteTextView) findViewById(R.id.autocompletion);
    autoComplete.setAdapter(adapter);

    Button add = (Button) findViewById(R.id.add); 
    add.setOnClickListener(sendForm2);
    Button remove = (Button) findViewById(R.id.remove);
    remove.setOnClickListener(sendForm2);

    channel = pref.getString(nameFile, null);
}


OnClickListener sendForm2 = new OnClickListener() {
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.add:
                myData = autoComplete.getText().toString();
                editor.putString(nameFile, myData);
                editor.commit();
            break;

            case R.id.remove:
                editor.remove(nameFile);
                editor.commit();
            break;   
        }
    }   
};

Проблема в том, что общие настройки вообще не сохраняют данные в канале. Даже когда я закрываю приложение и перезапускаю его. Любая подсказка или идея, как решить эту проблему?


person user3774435    schedule 25.07.2014    source источник
comment
откуда ты знаешь, что не сохранился?   -  person erik    schedule 25.07.2014
comment
Поскольку входное значение отсутствует в AutoCompleteTextView после того, как я нажал кнопку добавления и перезапустил приложение. Я не могу получить значение, как будто сохранение не было сделано.   -  person user3774435    schedule 25.07.2014
comment
Я вижу, вы установили [канал], но я не вижу, чтобы вы что-то с ним делали. даже не просто зарегистрировать его, чтобы увидеть, является ли он нулевым   -  person erik    schedule 25.07.2014
comment
Где вы считываете данные из SharedPrefernce? Также, насколько я могу судить, вы перезаписываете последнее значение новым введенным, поэтому не будет никакого списка, только одно значение   -  person Alex    schedule 25.07.2014
comment
Канал хранится в массиве valuesArray, используемом в AutoCompleteTextView.   -  person user3774435    schedule 25.07.2014
comment
мы не видим, что происходит   -  person erik    schedule 25.07.2014
comment
Алекс › строка channel = pref.getString(nameFile, null); — это место, где я должен прочитать значение и сохранить его.   -  person user3774435    schedule 25.07.2014


Ответы (2)


Первое, что я бы попробовал, это добавить

Log.d("OnCreate", "channel : "+ channel);

в onCreate сразу после

channel = pref.getString(nameFile, null);

чтобы увидеть, есть ли у вас что-то внутри.

Если вы этого не сделаете, это действительно означает, что общие префы не сохранены.

В этом случае я бы попытался вернуть:

pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
editor = pref.edit();

как раз перед

switch (v.getId()) {

Я помню, как читал, что иногда, в зависимости от того, что вы делаете со своими действиями, создаваемый вами редактор sharedpref может быть «потерян» и не связан ни с чем дальше в коде.

person Yahel    schedule 25.07.2014
comment
Спасибо, судя по LogCat, канал действительно пустой. - person user3774435; 25.07.2014
comment
Отлично, тогда просто попробуйте мой другой совет и дайте нам знать! - person Yahel; 25.07.2014
comment
Это привело к краху приложения, я проверю и исправлю, что не так. - person user3774435; 25.07.2014

Используйте следующий метод для сохранения и извлечения приоритета строки.

//сохраняем настройки, вставляя ключ и данные

public static void SavePrefrence(Context ctx, String Key, String value) {
    ctx.getSharedPreferences("mypref", ctx.MODE_PRIVATE)
            .edit().putString(Key, value).commit();
}

// получить предпочтение, передав ваш ключ

public static String getPrefrence(Context ctx, String key) {
        SharedPreferences pref = ctx.getSharedPreferences(
                "mypref", ctx.MODE_PRIVATE);
        String result = pref.getString(key, null);
        return result;
    }
person Ejaz Ahmad    schedule 25.07.2014