web-dev-qa-db-ja.com

Android-共有設定を使用した文字列の保存/取得

タイトルにあるように、特定の文字列を保存および取得したいです。しかし、私のコードは検索でもストアでも最初の行を通過しません。私はこのリンクをたどろうとしました: 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";
39
Rad

解決しました!クラス内からメソッドを呼び出したときに機能しませんでした!何らかの理由で別のクラスから呼び出す必要があり、"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(); 
4
Rad

設定に保存するには:

_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()が必要なのは、戻り値が必要な場合のみです。これは非常にまれです。

81
Doomsknight
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");
}
8
Benito Bertoli

Commit()の戻り値を気にしない場合は、commit()よりも非同期であるため、apply()を使用することをお勧めします。

final SharedPreferences prefs =  context.getSharedPreferences("PREFERENCE_NAME",
                Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", "value");
editor.apply();

docs

設定を永続ストレージに同期的に書き込むcommit()とは異なり、apply()はメモリ内のSharedPreferencesに変更をすぐにコミットしますが、ディスクへの非同期コミットを開始するため、エラーは通知されません。このSharedPreferencesの別のエディターがapply()が未処理の間に通常のcommit()を実行すると、commit()はすべての非同期コミットとコミット自体が完了するまでブロックします。

3
Aniket Thakur

コンテキストで試してください:

final SharedPreferences settings = context.getSharedPreferences(
            PREFS_NAME, 0);

return settings.getString(key, null);
2
Stefan Beike

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);
}
1
NEC

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();
0
Jabbir Basha