AOSP Android framework中保存用户设置的值(SharedPreferences和Settings.Global方法对比)

本文详细介绍了如何在Android应用中使用SharedPreferences进行轻量级数据存储,包括键值对操作、编辑和获取,以及如何利用Settings.Global进行系统级别配置的存储和读取。特别强调了数据在应用重启后的持久性问题。
摘要由CSDN通过智能技术生成

        如果想要在应用程序重启之后还保持已经修改好的值,一般需要进行数据的存储。

一.SharedPreferences

1.基本介绍:

        轻量级数据库,常用在应用中,主要保存一些常用配置,比如登录信息应用的主题设置等

2.使用方法:

A. 定义SharedPreferences.Editor变量:

SharedPreferences.Editor editor = getContext().getSharedPreferences("my_sharedPreferences", Context.MODE_PRIVATE).edit();

my_sharedPreferences为保存的SharedPreferences文件名

B.存入键值对

editor.putString("sharedPreferences_value", data);

sharedPreferences_value是键值对的名称,data是值,由于使用的是putString所以data应当是string型的。除此之外可以使用getBoolean,getInt,getFloat和getLong

C. 提交:editor.apply();

D.使用前先定义SharedPreferences变量

SharedPreferences pref = getContext().getSharedPreferences("my_sharedPreferences", Context.MODE_PRIVATE);

引号中的文件名是步骤a中的文件名

E.使用合适的变量接收get过来的数据

mData = pref.getString("sharedPreferences_value", defaultData);

defaultData是默认情况下sharedPreferences_value的值,如果找不到sharedPreferences_value值就返回defaultData。

大致的示例:

import android.content.SharedPreferences;

public void modifyAndSaveData(String s){
    string data = s;
    SharedPreferences.Editor editor = getContext().getSharedPreferences("my_sharedPreferences", Context.MODE_PRIVATE).edit();
    editor.putString("sharedPreferences_value", data);
    editor.apply();
}

public void useNewDate(){
    String defaultData = "defalt status";
    SharedPreferences pref = getContext().getSharedPreferences("my_sharedPreferences", 
    Context.MODE_PRIVATE);
    String mData = pref.getString("sharedPreferences_value",  defaultData);
}

二.Settings.Global

        Settings.Global 是 Android 系统级别的设置存储,主要用于存储一些系统级别的配置信息,如音量、屏幕超时等。

使用方法:

1.获取Settings.Global的值

        使用Settings.Global.getXxx(Xxx是基本类型数据),以int和String类型举例:

int value = Settings.Global.getInt(getContext().getContentResolver(), "my_data", 0);

其中 "my_data"是开发者自己命名的,系统会新建一个名为"my_data"的文件,然后把值放进去,0是默认值,如果"my_data"文件里面没有值则使用0。

        getInt是有默认值的,但是getString是没有默认值的:

String s = Settings.Global.getString(getContext().getContentResolver(), "my_string_data");

如果文件中没有内容,则s的值是null。

2.存放值

        使用Settings.Global.putXxx(Xxx是基本类型数据),以int和String类型举例:

int num = 2024;

Settings.Global.putInt(context.getContentResolver(), "my_data", num);

String date = "20240308"

Settings.Global.putString(context.getContentResolver(), "my_value_data", date);

        由于Settings.Global是可以设置全局的值的,所以理论上是可以不同包中的类中读取和存储值的,只要文件名一致即可。

        举例如下:

package com.android.systemui.statusbar.phone;

puclic class A {
    int num = 2024;
    Settings.Global.putInt(context.getContentResolver(), "my_data", num);
    String date = "20240308"
    Settings.Global.putString(context.getContentResolver(), "my_value_data", date);
}

//在另一个package下可以直接使用
package com.androd.systemui.statusbar.policy;

puclic class B {
    int value = Settings.Global.getInt(getContext().getContentResolver(), "my_data", 0);
    String s = Settings.Global.getString(getContext().getContentResolver(), "my_string_data");
}

以上代码均实测有效,如有错误烦请指正。

  • 26
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值