Frage

Ich bin ein Neuling in Android und versuche nur, eine Schnur dauerhaft zu speichern.

Ich möchte diese Zeichenfolge von einem bekommen PreferenceActivity und dann den Text von a aktualisieren TextView.

Ich habe über die verfügbaren Optionen für anhaltenden Speicher gelesen: http://developer.android.com/guide/topics/data/data-storage.html#pref

Ich habe versucht zu benutzen SharedPreferences Aber es ist sehr unklar für mich, wie es funktionieren sollte.

Ich habe eine sehr einfache Test -App erstellt.

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

Vorlieben.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>

Der Text der TextView Niemals ändert sich es, es wird immer auf den Wert eingestellt, den ich auf Strings.xml gesetzt habe.

Können Sie mir bitte helfen zu verstehen, was ich falsch mache?

Vielen Dank.

War es hilfreich?

Lösung

Sie sind sehr nahe an dem, was ich empfehlen würde:

1) Definieren Sie einige gemeinsame Vorlieben:

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

2) Lesen Sie aus gemeinsamen Vorlieben

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

3) Speichern/Aktualisieren einer gemeinsam genutzten Einstellungen:

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

Andere Tipps


Schnelles Beispiel für das Speichern/Schreiben von Benutzernamen, Passwort in Einstellungen.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);

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

Schnelles Beispiel für das Lesen von Benutzernamen, Passwort aus den Einstellungen.

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);    

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

Ich habe gerade meinen Code im Zusammenhang mit dem Zusammenhang mit SharedPreferences ist richtig, aber die TextView Aktualisiert niemals, weil ich versucht habe, die Zeichenfolge selbst direkt zu bearbeiten, nicht die TextView!

Einfach auf diese Weise gelöst:

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

Vielen Dank für deine Hilfe Jungs :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top