2013-03-15 3 views
1

У меня есть несколько прядильщиков, где я установил значения, четыре из них. Я хочу, чтобы они сохраняли текущие настройки между запусками. Когда вы выбираете значение в счетчике, оно не должно сохранять это значение до тех пор, пока не будет нажата кнопка updateSettings. Как мне это сделать?Как пользоваться sharedPreferences здесь?

здесь некоторый код, в OnCreate я делаю блесны со значениями по умолчанию:

mBaudSpinner = (Spinner) findViewById(R.id.bannerBaudSpinner); 
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(
      this, android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    mBaudSpinner.setAdapter(adapter); 
    String[] tempArray = SlickUSB2Serial.BAUD_RATES; 
    for (int i = 0; i < tempArray.length; i++) { 
     adapter.add(tempArray[i]); 
    } 
    mBaudSpinner.setSelection(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal()); 


    mDataSpinner = (Spinner) findViewById(R.id.bannerDataSpinner); 
    adapter = new ArrayAdapter<CharSequence>(this, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    mDataSpinner.setAdapter(adapter); 
    tempArray = SlickUSB2Serial.DATA_BITS; 
    for (int i = 0; i < tempArray.length; i++) { 
     adapter.add(tempArray[i]); 

    } 
    mDataSpinner 
      .setSelection(SlickUSB2Serial.DataBits.DATA_8_BIT.ordinal()); 

    mParitySpinner = (Spinner) findViewById(R.id.bannerParitySpinner); 
    adapter = new ArrayAdapter<CharSequence>(this, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    mParitySpinner.setAdapter(adapter); 
    tempArray = SlickUSB2Serial.PARITY_OPTIONS; 
    for (int i = 0; i < tempArray.length; i++) { 
     adapter.add(tempArray[i]); 

    } 
    mParitySpinner.setSelection(SlickUSB2Serial.ParityOption.PARITY_NONE 
      .ordinal()); 

    mStopSpinner = (Spinner) findViewById(R.id.bannerStopSpinner); 
    adapter = new ArrayAdapter<CharSequence>(this, 
      android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    mStopSpinner.setAdapter(adapter); 
    tempArray = SlickUSB2Serial.STOP_BITS; 
    for (int i = 0; i < tempArray.length; i++) { 
     adapter.add(tempArray[i]); 

    } 
    mStopSpinner 
      .setSelection(SlickUSB2Serial.StopBits.STOP_1_BIT.ordinal()); 

Если я нажимаю updateSettings, этот код выполняется:

else if (v == mUpdateSettings) { 
      if (mSelectedAdapter == null) { 
       return; 
      } 

      mSelectedAdapter.setCommSettings(BaudRate.values()[mBaudSpinner 
        .getSelectedItemPosition()], DataBits.values()[mDataSpinner 
        .getSelectedItemPosition()], 
        ParityOption.values()[mParitySpinner 
          .getSelectedItemPosition()], 
        StopBits.values()[mStopSpinner.getSelectedItemPosition()]); 

    } 

Я пытаюсь использовать настройки, как это например, для одного счетчика, это на правильном пути?

SharedPreferences prefs; 
     prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.Editor prefEditor = prefs.edit(); 
     prefEditor.putString("savedValue",mBaudSpinner.getSelectedItem().toString()); 
     prefEditor.commit(); 
     String username = prefs.getString("savedValue", String.valueOf(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal())); 
     mBaudSpinner.setSelection(Integer.parseInt(username)); 

Что вы делаете, я делаю то sharedPrefs вещи глобальные, так что он может быть использован как в OnCreate и в кнопку щелчка слушателя? Затем измените строки, которые устанавливают значения по умолчанию для блесен, чтобы что-то вроде этого, как пример:

String username = prefs.getString("savedValue", String.valueOf(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal())); 
      mBaudSpinner.setSelection(Integer.parseInt(username)); 

Затем положить другие вещи о сохранении значения в кнопке слушателя? Я пытаюсь это, но состояние не сохраняет и всегда по умолчанию использует неправильное значение. Это то, что я делаю правильно?

EDIT

Эти строки, кажется, не установлено право на значение по умолчанию, почему это?

prefs = PreferenceManager.getDefaultSharedPreferences(this); 
     String username = prefs.getString("savedValue", Integer.toString(SlickUSB2Serial.BaudRate.BAUD_9600.ordinal())); 
     mBaudSpinner.setSelection(Integer.parseInt(username)); 
+0

Если ваш класс является активным, попробуйте использовать 'getPreferences' или' getSharedPreferences' вместо 'PreferenceManager.getDefaultSharedPreferences (this);' –

+0

Я исправил эту ошибку, ваш путь также дал значение nullpointer. Видимо, вы не можете использовать контекст во всем мире? он вызывает nullpointer, поэтому я просто настроил его дальше по коду. Теперь моя проблема остается в том, что выпадающее меню никогда не устанавливается правильно – Paul

+0

спасибо bruno, я посмотрю разницу. Это деятельность – Paul

ответ

1

Посмотрите, когда вы звоните:

mBaudSpinner.getSelectedItem() 

вы получили объект и преобразовать его в строку. Когда вы звоните:

mBaudSpinner.setSelection(Integer.parseInt(username)) 

вы получаете строку и конвертируете в int. Тем не менее, setSelectionshould получают позицию int и getSelectedItem возвращают объект, а не позицию позиции.

+0

спасибо, просто пытаясь получить лучший способ получить позицию, я, кажется, делаю это в раунде по пути – Paul

+0

Я не думаю да. Однако вы должны реорганизовать свой код и уменьшить его размер. Вы можете использовать этот конструктор адаптера для уменьшения количества строк. 'new ArrayAdapter (this,, android.R.layout.simple_spinner_item, SlickUSB2Serial.BAUD_RATES);' Вы можете изменить: 'BaudRate.values ​​() [mBaudSpinner.getSelectedItemPosition()]' to 'mBaudSpinner.getSelectedItem () '. И то же самое для других прядильщиков. –

+0

Спасибо, я смог получить индекс от значения, так что теперь все хорошо. – Paul

Смежные вопросы