25

我想保存一个标志来识别我的应用程序是否第一次运行。对于这个简单的工作,我不想创建数据库..

有一个简单的选择吗?我只想保存和阅读少量信息。

4

6 回答 6

55

使用sharedPreferencefiles保存数据,但更好的选择是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();
于 2013-03-13T12:19:03.290 回答
32

使用SharedPreferences.

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

edit.putBoolean("isFirstRun", false);
edit.commit();
于 2013-03-13T12:21:15.643 回答
10

一种正确的方法SharedPreferences是使用用于此类事情的 Android 类。

存储设置

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尚未创建的内容时,您将创建一个新的。在这里查看更多这样的行为。

应用()与提交()

您可以使用editor.apply()as well editor.commit(),唯一的区别是 apply() 不会返回boolean值 with 如果编辑成功与否。editor.apply() 因此更快更常用。

什么是 MODE_PRIVATE

您可以在这里看到所有关于不同模式的信息。对于你的情况MODE_PRIVATE很好。

检索设置

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

SharedPreferences对象中检索设置时,您始终必须指定一个默认值,该默认值将在未找到该设置时返回。在这种情况下,就是false.

于 2015-05-02T12:26:20.577 回答
4

我建议您使用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);
于 2013-03-13T12:20:21.290 回答
3

例如,您可以做一个类:(例如对象)

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

}
于 2015-11-20T16:36:06.913 回答
2

全局使用static变量怎么样?

您可以按照本教程中的说明进行操作。我知道处理内容提供​​者是不必要的,只是为了保留一些标志。

否则,您可以查看Android 提供的共享首选项。这是一个很好的入门示例。

这将是我的建议。

于 2013-03-13T12:20:32.570 回答