Comment puis-je stocker de façon permanente une valeur à partir d'un écran de préférence?

StackOverflow https://stackoverflow.com/questions/8840391

Question

Je suis un débutant dans Android et je suis juste essayer de stocker de façon permanente une chaîne.

Je veux obtenir cette chaîne à partir d'un PreferenceActivity puis mettre à jour le texte d'un TextView.

J'étais en train de lire sur les options disponibles pour le stockage persistant: http : //developer.android.com/guide/topics/data/data-storage.html#pref

Je l'ai essayé d'utiliser SharedPreferences mais il est très clair pour moi sur la façon dont il devrait fonctionner.

J'ai créé une application de test très simple.

MainActivity.java

public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

/* method that starts preferences */
public void openPreferences(View v) {
    Intent i = new Intent(this, Preferences.class);
    startActivity(i);
}

@Override
protected void onStart(){
    super.onStart();

    // Get preferences
    SharedPreferences preferences = getPreferences(0);
    String name = preferences.getString("name","Empty string!");

    // Create a RemoteViews layout
    RemoteViews views = new RemoteViews(getPackageName(),R.layout.main);       
    // set new text for labels
    views.setTextViewText(R.string.name, name);
}

@Override
protected void onStop(){
    super.onStop();

    // We need an Editor object to make preference changes.
    // All objects are from android.context.Context
    SharedPreferences preferences = getPreferences(0);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("name", "This is a test");
    // Commit the edits!
    editor.commit();
}
}

Preferences.java

public class Preferences extends PreferenceActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.preferences);
        }
}

AndroidManifest.xml

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".MainActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".Preferences" 
              android:label="@string/preferences_title">
    </activity>

</application>

Le texte du TextView ne change jamais, il est toujours à la valeur I réglé sur strings.xml.

Pouvez-vous me aider à comprendre ce que je fais mal?

Merci beaucoup.

Était-ce utile?

La solution

Vous êtes très proche de ce que je vous recommande:

1) Définir des préférences partagées:

    public static final String MY_PREFERENCES = "MyPreferences";
    ...
    public static final SOME_PREFERENCE = "SomePreference";

2) Lire des préférences partagées

    SharedPreferences myPreferences;
    ...
    myPreferences = getSharedPreferences (MY_PREFERENCES, Context.MODE_PRIVATE);

3) Enregistrer / mettre à jour les préférences d'un partage:

    Editor editor = myPreferences.edit ();
    editor.putString (SOME_PREFERENCE, "abc");
    editor.commit ();

Autres conseils


Exemple rapide de sauvegarde / écriture nom d'utilisateur, mot de passe dans les préférences.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

Editor edit = preferences.edit();        
edit.putString("username", "abcd");        
edit.putString("password", "abcd#");        
edit.commit();

Exemple rapide du nom d'utilisateur lecture, mot de passe préférences.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);    

String strUsername = preferences.getString("username", null);   
String strPassword = preferences.getString("password", null);   

Je viens de réaliser mon code lié à SharedPreferences est correct, mais le TextView met jamais à jour parce que j'essayé de modifier directement la chaîne elle-même, pas le TextView!

Juste résolu de cette façon:

    /* Update text of TextView */
    TextView t = (TextView) this.findViewById(R.id.name);
    // previously was R.string.name - not correct!
    t.setText(name);

Merci beaucoup pour votre aide les gars:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top