在安卓系统中将少量信息保存为设置(例如应用程序首次运行时)

26

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

有没有简单的选项可以做到这一点?我只想保存和读取少量的信息。


最简单的保存类似信息的方式是使用 Preferences。 您可以在文档中的保存键值集合中找到一个很好的介绍。 - Ben Weiss
SharedPreference是一个不错的选择。http://developer.android.com/reference/android/content/SharedPreferences.html - sachinsharma
6个回答

58

使用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();

32

使用 SharedPreferences

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

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

10

一个正确的方法是使用Android类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


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

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

}

2

使用全局static变量怎么样?

你可以按照这篇教程来定义。我知道为了保持一些标志而处理内容提供程序是不必要的。

否则,你可以查看Android提供的共享首选项这里有一个很好的例子可以帮助你入门。

这将是我的建议。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接