Android——配置文件的保存SharedPreferences进行数据存储


非常多时候我们开发的软件须要向用户提供软件參数设置功能,比如我们经常使用的
QQ ,用户能够设置是否同意陌生 人加入自己为好友。对于软件配置參数的保存,假设是 window 软件通常我们会採用 ini 文件进行保存,假设是 j2se 应用,我们会採用 properties 属性文件或者 xml 进行保存。假设是 Android 应用,我们最适合採用什么方式 保存软件配置參数呢? Android 平台给我们提供了一个 SharedPreferences 类,它是一个轻量级的存储类。特 别适合用于保存软件配置參数。使用 SharedPreferences 保存数据,其背后是用 xml 文件存放数据,文件存放 /data/data/<package name>/shared_prefs 文件夹下:
SharedPreferences sharedPreferences = getSharedPreferences("itcast", Context.MODE_PRIVATE);
Editor editor = sharedPreferences.edit();// 获取编辑器
editor.putString("name", " 杨超 ");
editor.putInt("age", 4);
editor.commit();// 提交改动
生成的 itcast.xml 文件内容例如以下:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<string name="name"> 杨超 </string>
<int name="age" value="4" />
</map>
由于 SharedPreferences 背后是使用 xml 文件保存数据, getSharedPreferences(name,mode) 方法的第一个參数用于指定该文件的名 称,名称不用带后缀,后缀会由 Android 自己主动加上。方法的第二个參数指定文件的操作模式。共同拥有四种操作模式,这四种模式 前面介绍使用文件方式保存数据时已经解说过。

假设希望

SharedPreferences 背后使用的 xml 文件能被其它应用读和写。能够指 Context.MODE_WORLD_READABLE Context.MODE_WORLD_WRITEABLE 权限。
另外 Activity 还提供了还有一个 getPreferences(mode) 方法操作 SharedPreferences 。这种方法默认使用当前类不带包名的类名作为文 件的名称。
l

訪问 SharedPreferences 中的数据代码例如以下:
SharedPreferences sharedPreferences = getSharedPreferences("itcast", Context.MODE_PRIVATE);
//getString() 第二个參数为缺省值。假设 preference 中不存在该 key ,将返回缺省值
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 1);
假设訪问其它应用中的 Preference ,前提条件是:该 preference 创建时指定了 Context.MODE_WORLD_READABLE 或者 Context.MODE_WORLD_WRITEABLE 权限。如:有个 <package name> cn.itcast.action 的应用使用以下语句创建了 preference
getSharedPreferences("itcast", Context. MODE_WORLD_READABLE);
其它应用要訪问上面应用的 preference 首先须要创建上面应用的 Context ,然后通过 Context  訪问 preference  訪问 preference 时会在应用所在包下的 shared_prefs 文件夹找到 preference 
Context otherAppsContext = createPackageContext("cn.itcast.action", Context. CONTEXT_IGNORE_SECURITY );
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("itcast",  Context.MODE_WORLD_READABLE);
String name = sharedPreferences.getString("name", "");
int age = sharedPreferences.getInt("age", 0);
假设不通过创建 Context 訪问其它应用的 preference 。也能够以读取 xml 文件方式直接訪问其它应用 preference 相应的 xml 文件。如:
File xmlFile = new File( /data/data/<package name>/shared_prefs/itcast.xml );//<package name> 应替换成应用的包名
l

------------------------------------------------------------

/**

 * 保存设置文件的參数

 * @author Administrator yangchao

 */

public class MainActivity extends Activity {

    EditText etNameetAgeetContent;

    //定义一个使用SharedPreferences保存数据,其背后是用xml文件存放数据,

    SharedPreferences preferences;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

       

        etName = (EditText) findViewById(R.id.etName);

        etAge = (EditText) findViewById(R.id.etAge);

        etContent = (EditText) findViewById(R.id.etContent);

        /**

         * 获取SharedPreferences

         * 使用SharedPreferences保存数据,其背后是用xml文件存放数据,

         * 文件存放在/data/data/<package name>/shared_prefs文件夹下:

         */

        preferences = this.getSharedPreferences("prefer"MODE_PRIVATE);

    }

   

    /**

     * 进行数据的保存

     * @param view

     */

    public void click(View view)

    {

        String name = etName.getText().toString().trim();

        String age = etAge.getText().toString().trim();

       

        Editor editor = preferences.edit();//获取编辑器

        editor.putString("name", name);

        editor.putInt("age"new Integer(age));

        editor.commit();//提交数据  将数据进行永久性保存

        Toast.makeText(this"保存成功", 1).show();

    }

   

    /**

     * 进行数据的读取

     * @param view

     */

    public void read(View view)

    {

        String name = preferences.getString("name""默认人名");

        int age = preferences.getInt("age", 000);

        etContent.setText("name: "+name + ",age:"+ age);

    }

}

 





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值