タイトルにあるように、特定の文字列を保存および取得したいです。しかし、私のコードは検索でもストアでも最初の行を通過しません。私はこのリンクをたどろうとしました: http://developer.Android.com/guide/topics/data/data-storage.html
private void savepath(String pathtilsave, int i) {
String tal = null;
// doesn't go past the line below
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
tal = String.valueOf(i);
editor.putString(tal, pathtilsave);
editor.commit();
}
そして、私の検索メソッド:
public void getpaths() {
String tal = null;
// doesn't go past the line below
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
for (int i = 1; i <= lydliste.length - 1; i++) {
tal = String.valueOf(i);
String restoredText = settings.getString(tal, null);
if (restoredText != null) {
lydliste[i] = restoredText;
}
}
}
lydlisteは静的な文字列配列です。 PREFS_NAME
は
public static final String PREFS_NAME = "MyPrefsFile";
解決しました!クラス内からメソッドを呼び出したときに機能しませんでした!何らかの理由で別のクラスから呼び出す必要があり、"classname.this"をContextパラメーターとして記述する必要がありました。最終的な作業は次のとおりです。
SharedPreferences settings = ctx.getSharedPreferences(PREFS_NAME, 0);
settings = ctx.getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putString(tal, pathtilsave);
editor.commit();
設定に保存するには:
_PreferenceManager.getDefaultSharedPreferences(context).edit().putString("MYLABEL", "myStringToSave").apply();
_
保存された設定を取得するには:
_PreferenceManager.getDefaultSharedPreferences(context).getString("MYLABEL", "defaultStringIfNothingFound");
_
ここで、context
はコンテキストです。
複数の値を取得している場合、同じインスタンスを再利用する方が効率的です。
_ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
String myStrValue = prefs.getString("MYSTRLABEL", "defaultStringIfNothingFound");
Boolean myBoolValue = prefs.getBoolean("MYBOOLLABEL", false);
int myIntValue = prefs.getInt("MYINTLABEL", 1);
_
また、複数の値を保存している場合:
_Editor prefEditor = PreferenceManager.getDefaultSharedPreferences(context).edit();
prefEditor.putString("MYSTRLABEL", "myStringToSave");
prefEditor.putBoolean("MYBOOLLABEL", true);
prefEditor.putInt("MYINTLABEL", 99);
prefEditor.apply();
_
注:apply()
を使用した保存は、commit()
を使用するよりも優れています。 commit()
が必要なのは、戻り値が必要な場合のみです。これは非常にまれです。
private static final String PREFS_NAME = "preferenceName";
public static boolean setPreference(Context context, String key, String value) {
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putString(key, value);
return editor.commit();
}
public static String getPreference(Context context, String key) {
SharedPreferences settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
return settings.getString(key, "defaultValue");
}
Commit()の戻り値を気にしない場合は、commit()よりも非同期であるため、apply()を使用することをお勧めします。
final SharedPreferences prefs = context.getSharedPreferences("PREFERENCE_NAME",
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", "value");
editor.apply();
設定を永続ストレージに同期的に書き込むcommit()とは異なり、apply()はメモリ内のSharedPreferencesに変更をすぐにコミットしますが、ディスクへの非同期コミットを開始するため、エラーは通知されません。このSharedPreferencesの別のエディターがapply()が未処理の間に通常のcommit()を実行すると、commit()はすべての非同期コミットとコミット自体が完了するまでブロックします。
コンテキストで試してください:
final SharedPreferences settings = context.getSharedPreferences(
PREFS_NAME, 0);
return settings.getString(key, null);
SharedPreferencesで文字列を保存する簡単な手順:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SharedPreferences prefs = this.getSharedPreferences("com.example.nec.myapplication", Context.MODE_PRIVATE);
prefs.edit().putString("userName", "NEC").apply();
String name = prefs.getString("userName", "");
Log.i("saved string", name);
}
SharedPreferencesクラスを使用すると、Androidアプリケーションに固有の設定を保存できます。
APIバージョン11では、メソッドputStringSetおよびgetStringSetが導入されました。これらのメソッドを使用すると、開発者はそれぞれ文字列値のリストを保存し、文字列値のリストを取得できます。
SharedPreferencesを使用して文字列の配列を保存する例は、次のように実行できます。
// Get the current list.
SharedPreferences settings = this.getSharedPreferences("YourActivityPreferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
Set<String> myStrings = settings.getStringSet("myStrings", new HashSet<String>());
// Add the new value.
myStrings.add("Another string");
// Save the list.
editor.putStringSet("myStrings", myStrings); editor.commit();