web-dev-qa-db-ja.com

Androidの設定として少しの情報を保存します(そのアプリが初めて実行されるときのように)

アプリが初めて実行されたことを認識するためのフラグを保存したい。この簡単な仕事では、データベースを作成したくありません。

これを行う簡単なオプションはありますか?小さな情報だけを保存して読みたい。

23
Fcoder

SharedPreferencesを使用します。

SharedPreferences preferences = getSharedPreferences("prefName", MODE_PRIVATE);
SharedPreferences.Editor edit= preferences.edit();

edit.putBoolean("isFirstRun", false);
edit.commit();
31

sharedPreferenceまたはfilesを使用してデータを保存しますが、より良いオプションはsharedPreferenceです。

検索用

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);

保存用

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", true);
editor.commit();
54
Ajay S

これを行う適切な方法は、Android class SharedPreferencesを使用することです。これは、このようなものに使用されます。

設定の保存

_SharedPreferences settings = getSharedPreferences(NAME_OF_PREFERENCES, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("appPreviouslyStarted", true);
editor.apply();
_

適用することを忘れないでください。そうしないと、設定への変更が保存されません!

異なる_NAME_OF_PREFERENCES_を使用して、複数の設定を作成できます。設定はデバイスに保存されるため、アプリケーションを閉じた後に利用できます。

まだ作成されていない_NAME_OF_PREFERENCES_を取得しようとすると、新しいものを作成します。このようなより多くの振る舞いを見る ここ

apply()とcommit()の比較

editor.apply()だけでなくeditor.commit()も使用できます。唯一の違いは、apply()は、編集が成功したかどうかにかかわらず、boolean値を返さないことです。そのため、editor.apply()はより高速で一般的に使用されます。

MODE_PRIVATEとは

さまざまなモードのすべてを見ることができます ここ 。あなたの場合は_MODE_PRIVATE_で結構です。

設定の取得

_SharedPreferences settings = getSharedPreferences(NAME_OF_PREFERENCES, MODE_PRIVATE);
boolean silent = settings.getBoolean("silentMode", false);
_

SharedPreferencesオブジェクトから設定を取得するときは、設定が見つからなかったときに返されるデフォルト値を常に指定する必要があります。この場合はfalseです。

10
Joop

SharedPreference 永続的なストレージを使用することをお勧めします。少量の情報のための非常に簡単で高速な保存/検索。

SharedPreferenceから値を取得するコードを参照してください

   // Restore preferences
   SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
   boolean silent = settings.getBoolean("silentMode", false);
   setSilent(silent);

そしてSharedPreferenceに値を保存する

 // We need an Editor object to make preference changes.
  // All objects are from Android.context.Context
  SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
  SharedPreferences.Editor editor = settings.edit();
  editor.putBoolean("silentMode", mSilentMode);
4
Raynold

たとえば、1つのクラスを実行できます:(たとえば、オブジェクトのように)

import Android.content.Context;
import Android.content.SharedPreferences;


public class SettingsMain {

    Context context;
    SharedPreferences preferences;
    SharedPreferences.Editor editor;

    private static final String PREFER_NAME = "settingsMain";
    public static final String KEY_VIBRATE = "switchVibrate";

    public SettingsMain(Context context) {
        this.context = context;
        setPreferences();
    }

    private void setPreferences(){
        preferences = context.getSharedPreferences(PREFER_NAME, context.MODE_PRIVATE);
        editor = preferences.edit();
    }

    public void cleanPreferences(){
        editor.clear();
        editor.commit();
    }

    public void setStatusVibrate(Boolean status){
        editor.putBoolean(KEY_VIBRATE, status);
        editor.commit();
    }
    public Boolean getstatusVibrate(){
        return preferences.getBoolean(KEY_VIBRATE, true);
    }
}

あなたの活動の呼び出しで:

public class Home extends AppCompatActivity {


    private SettingsMain settings;
    private SwitchCompat switchVibrate;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.master);


        setResources();
        getSettings();

    }

    private void setResources(){

        switchVibrate = (SwitchCompat) findViewById(R.id.master_main_body_vibrate_switch);
        switchVibrate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                settings.setStatusVibrate(isChecked);
            }
        });
    }

    private void getSettings(){
        settings = new SettingsMain(this);
        switchVibrate.setChecked(settings.getstatusVibrate());
    }

}
3
Alex Zaraos

static変数をグローバルに使用するのはどうですか?

あなたはこれを行うことができます このチュートリアルで与えられているように 。一部のフラグを保持するためだけにコンテンツプロバイダーを処理する必要はありません。

それ以外の場合は、Androidによって提供される Shared Preferences をチェックアウトできます。 これが良い例です 始めましょう。

これが私の推薦です。

2
Jay Mayu