2013-03-15 6 views
1

J'ai quelques filateurs où je définis des valeurs, quatre d'entre eux. Je veux qu'ils conservent les paramètres actuels entre les lancements. Lorsque vous sélectionnez une valeur dans le compteur, il ne doit pas enregistrer cette valeur tant que le bouton updateSettings n'est pas enfoncé. Comment je vais à ce sujet?Comment utiliser sharedPreferences ici?

ici est un code, en onCreate je fais fileurs avec des valeurs par défaut:

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

Si je clique updateSettings, ce code est exécuté:

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

    } 

Je suis en train d'utiliser les préférences comme celui-ci Pour un exemple, est-ce qu'il est sur la bonne voie?

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

Que faites-vous, dois-je faire les sharedPrefs gavent mondiale afin qu'il puisse être utilisé à la fois onCreate et dans l'écouteur en cliquant le bouton? Modifiez ensuite les lignes qui définissent les valeurs par défaut pour les filateurs à quelque chose comme ceci comme exemple:

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

ensuite mettre les autres trucs sur l'enregistrement des valeurs dans l'écouteur bouton? J'essaye ceci mais l'état ne sauve pas et toujours par défaut à la valeur fausse. Est ce que je fais bien?

EDIT

Ces lignes ne semblent pas définir le droit de valeur par défaut, pourquoi est-ce?

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

Si votre classe est une activité, essayez d'utiliser 'getPreferences' ou' getSharedPreferences' au lieu de 'PreferenceManager.getDefaultSharedPreferences (this);' –

+0

J'ai corrigé cette erreur, votre chemin a également donné un pointeur null. Apparemment, vous ne pouvez pas utiliser le contexte globalement? il provoque un nullpointer, donc je l'ai juste mis en place plus bas dans le code. Maintenant, mon problème reste est que la liste déroulante n'est jamais réglée – Paul

+0

merci bruno, je vais chercher la différence. C'est une activité – Paul

Répondre

1

Regardez, lorsque vous appelez:

mBaudSpinner.getSelectedItem() 

vous avez un objet et de le convertir en chaîne. Lorsque vous appelez:

mBaudSpinner.setSelection(Integer.parseInt(username)) 

vous obtenez la chaîne et convertir en int. Cependant, les setSelectionshould reçoivent une position int et getSelectedItem renvoie un objet et non la position de l'élément.

+0

merci juste d'essayer d'obtenir le meilleur moyen de recevoir la position, je semble de le faire dans un tour environ – Paul

+0

Je ne sais pas je le pense. Cependant, vous devriez refactoriser votre code et diminuer sa taille. Vous pouvez utiliser ce constructeur d'adaptateur pour réduire le nombre de lignes. 'Nouveau ArrayAdapter (cela, android.R.layout.simple_spinner_item, SlickUSB2Serial.BAUD_RATES);' Vous pouvez modifier: 'BaudRate.values ​​() [mBaudSpinner.getSelectedItemPosition()]' 'à mBaudSpinner.getSelectedItem () '. Et la même chose pour les autres fileurs. –

+0

Merci, j'ai été en mesure d'obtenir l'index de la valeur, donc tout va bien maintenant. – Paul