【问题标题】:Having difficulty understanding shared preferences难以理解共同的偏好
【发布时间】:2015-03-30 07:31:37
【问题描述】:

我一直在互联网上搜索有关 android 的共享偏好。我正在开发一个需要存储大量数据的应用程序。我有三个重要的问题,请尽量用清晰的解释来回答它们(最好简短且内容丰富):

  1. 如何设置初始值(默认值),如果将编辑器放在启动画面中,那么每次用户启动应用程序时都会重置这些值。
  2. 使用 getSomething() 总是可以得到你放入其中的值,比如如果我说 getBoolean(first_start,true) 它将返回 true,如果我想获取存储在文件中的值,我该怎么做??
  3. 我可以创建sharedpreferences文件(txt)并将默认值以keyvaluepair格式放入apk中,以便用户安装应用程序时获得默认值??

提前感谢您在我身上浪费我的时间:P

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    1 - 在共享首选项中放置一些标志,这些标志将在初始值设置后设置。并将标志检查放在启动画面中。

    2 - 你可以使用资产 - Where do I place the 'assets' folder in Android Studio?

    3 - 是的。您可以将文件放入资产中并在首次运行时读取它,并在共享首选项中设置初始值。

    【讨论】:

    • 感谢您的回答,我已经开始创建资产,但是我无法理解第一点,在共享首选项上添加标志就像在其中添加字符串值一样,对吧?如果是这样,它仍然没有解决,因为我怎样才能第一次读取具有默认值的字符串?你能给我一个如何设置“first_time”布尔值的例子吗?还是“signed_in”布尔值?
    【解决方案2】:

    先看这个简单的示例:

    SharedPreferences sharedPreferences = getSharedPreferences("name", Context.MODE_PRIVATE);
    

    SharedPreference 将键值对存储在 xml 文件中。如果'/data/data/<package name>/shared_prefs' 目录下不存在该文件,则上面的简单示例将生成一个名为'name.xml' 的xml 文件,其中所有SharedPreference 文件都存在。

    float aFloat = sharedPreferences.getFloat("float", 0.0f);
    

    而这一行的意思是:你想得到一个存储在xml文件'name.xml'中的浮点值。如果您曾经在'name.xml' 文件中存储了名为'float' 的浮点值,它将返回您存储的值;如果没有,它将返回0.0,这是'float' 的默认值。 所以, 1,2、不需要刻意初始化一个默认值。您可以通过第二行代码设置默认值。 3、不能创建'.txt'格式的SharedPreference文件,也不需要这样做。有关 SharedPreference 的所有信息都将存储在 '/data/data/<package name>/shared_prefs' 中的 xml 中。 希望这会帮助你。

    【讨论】:

    • 好的,所以如果我想检查第一次启动,我会输入 {Boolean firstTimeChecker = sharedPreferences.getBoolean("first_time",false); if(firstTimeChecker) skipTutorial(); else startActivity(tutorial_intent);} 如果没有创建值,我给出的 false 将被设置为默认值,但是当我将值更改为 true 时,它​​永远不会回到 false,直到用户清除应用程序数据,可以你确认我是否理解正确
    • @YousifAl-Raheem 嘿,伙计,你不能接受上面的答案!
    • 对不起,我试图接受两个,结果你只能接受一个答案,looool sorry
    • 顺便说一句,问题已解决,应用程序运行良好,非常感谢您的帮助:D
    • @YousifAl-Raheem 哦,恭喜。
    【解决方案3】:
            SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
    
    //if value for first_run does not exist. That we have first run of application.
    //prefs.getBoolean("first_run", true); will return default value true
        Boolean first_run = prefs.getBoolean("first_run", true);
        if (first_run) {
           Editor editor = prefs.edit();
           // after that Boolean first_run = prefs.getBoolean("first_run", true);
           // will always return false
           editor.putBoolean("first_run", false); 
           // do some on first app run
        } else {
           // do some if not first run
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2012-05-02
      • 2014-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多