2012-01-12 18 views
1

私はAndroidの初心者です。文字列を永続的に保存しようとしています。どのように設定画面から値を永久に保存できますか?

PreferenceActivityからこの文字列を取得し、TextViewのテキストを更新したいとします。

私は永続的な記憶のために利用可能なオプションについては読んでいた:http://developer.android.com/guide/topics/data/data-storage.html#pref

私はSharedPreferencesを使用することを試みたが、それは、それがどのように動作するかを上の私にとっては非常に不明です。

私は非常に簡単なテストアプリケーションを作成しました。

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> 

TextView決して変更のテキスト、それは常に私がのstrings.xmlに設定された値に設定されています。

私は何が間違っているのか理解してもらえますか?

ありがとうございました。

+0

を私はsharedpreferencesに関連したコードが正しいと思います。リモートビューのリフレッシュに関係するかもしれません。 preferences.getStringを記録しましたか?それは間違った価値を示していますか? – nandeesh

答えて

4

あなたは、私がお勧めしたいものに非常に近いです:

1)いくつかの共有設定を定義します。

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

2)リードは、共有設定から

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

3)保存共有の設定を更新する:

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

ユーザ名、パスワードを環境設定に保存/書き込む簡単な例です。環境設定からユーザ名、パスワードを読み取る

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 

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

クイック例。

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);  

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

0

私はちょうどSharedPreferencesに関連する私のコードを実現正しいですが、私は直接文字列自体、ないTextViewを編集しようとしたので、TextViewを更新したことがありません!

ただ、この方法では解決:あなたの助けみんなのため

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

多くの感謝:)

関連する問題