Android数据持久化之Preferences机制详解

Android数据持久化之Preferences机制详解,第1张

概述本文实例讲述了Android数据持久化之Preferences机制。分享给大家供大家参考,具体如下:

本文实例讲述了AndroID数据持久化之Preferences机制。分享给大家供大家参考,具体如下:

在AndroID中,实现数据持久化有五种方式:Preferences,文件file,I/O *** 作、sqlite数据库,ContentProvIDer组件。

下面逐个做一简单的介绍:

一、Preferences的介绍:

Preferences是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括boolean类型,int类型,float类型,long类型以及String类型的数据,以键值对的形式存储在应用程序的私有Preferences目录(/data/data/<包名>/shared_prefs/)中,这种Preferences机制广泛应用于存储应用程序中的配置信息。

如下是Preferences的一个简单代码:

这个代码是创建不同权限的数据对象:

package com.example.data_sharedpreferences;import androID.os.Bundle;import androID.app.Activity;import androID.content.Context;import androID.content.SharedPreferences;import androID.vIEw.Menu;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.TextVIEw;public class MainActivity extends Activity {  private TextVIEw text;  private button button;  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    // 写入数据    writeData();    text = (TextVIEw) findVIEwByID(R.ID.text);    button = (button) findVIEwByID(R.ID.button0);    button.setonClickListener(new OnClickListener() {      @OverrIDe      public voID onClick(VIEw v) {        // Todo auto-generated method stub        // 读取数据        readData();      }    });  }  /**   * 写入数据   */  public voID writeData() {    // 设置权限为私有MODE_PRIVATE    SharedPreferences sp_p = this.getSharedPreferences("ct_sp_private",Context.MODE_PRIVATE);    // 通过SharedPreferences对象的编辑器对象Editor来实现存入数据    SharedPreferences.Editor editor = sp_p.edit();    // 通过该编辑器函数设置键值    editor.putString("username","marry_private");    // 提交数据,并将数据写入xml文件中    editor.commit();    // 设置为只读    SharedPreferences sp_or = this.getSharedPreferences("ct_sp_private",Context.MODE_WORLD_READABLE);    sp_or.edit().putString("username","marry_only_read").commit();    // 设置为只写    SharedPreferences sp_ow = this.getSharedPreferences("ct_sp_private",Context.MODE_WORLD_WRITEABLE);    sp_ow.edit().putString("username","marry_only_write").commit();    // 设置为可读可写    SharedPreferences sp_x = this.getSharedPreferences("ct_sp_private",Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE);    sp_x.edit().putString("username","marry_write_read").commit();  }  /**   * 读取数据   * 通过SharedPreferences对象的键key可以获取到对应key的键值value。对于不同类型的键值有不同的函数:getBoolean   *,getInt,getfloat,getLong.   */  public voID readData() {    // Todo auto-generated method stub    text.setText("private_username:"        + this.getSharedPreferences("ct_cp_private",0).getString(            "username","marry_private")        + "\r\n"        + "read_username:"        + this.getSharedPreferences("ct_cp_private","marry_only_read")        + "\r\n"        + "write_username:"        + this.getSharedPreferences("ct_cp_private","marry_only_write")        + "\r\n"        + "write_read_username:"        + this.getSharedPreferences("ct_cp_private","marry_write_read") + "\r\n");  }  @OverrIDe  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main,menu);    return true;  }}

下面这个代码则是实现在另外一个应用中访问上一个应用,并读取上面应用的数据:

package com.example.data_sharedpreferences2;import com.example.data_sharedpreferences2.R;import androID.os.Bundle;import androID.app.Activity;import androID.content.Context;import androID.content.pm.PackageManager.nameNotFoundException;import androID.vIEw.Menu;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.button;import androID.Widget.TextVIEw;/** * 该程序的功能是访问data_sharedpreferences应用 Sharedpreferences访问另一个应用的条件: * 1、被访问的应用权限为可读或者可写 2、必须要知道被访问应用的包名 * * @author marry * */public class MainActivity extends Activity {  private TextVIEw text;  private button button;  @OverrIDe  protected voID onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentVIEw(R.layout.activity_main);    text = (TextVIEw) findVIEwByID(R.ID.text);    button = (button) findVIEwByID(R.ID.button0);    button.setonClickListener(new OnClickListener() {      @OverrIDe      public voID onClick(VIEw v) {        // 访问应用1,并读取应用1的数据        try {          // 获得要访问应用的context          Context ortherContext = createPackageContext(              "com.example.data_sharedpreferences",0);          // 通过ortherContext.getSharedPreferences打开应用1的文件          text.setText("private_username:"              + ortherContext.getSharedPreferences(                  "ct_cp_private",0).getString("username","marry_private")              + "\r\n"              + "read_username:"              + ortherContext.getSharedPreferences(                  "ct_cp_private","marry_only_read")              + "\r\n"              + "write_username:"              + ortherContext.getSharedPreferences(                  "ct_cp_private","marry_only_write")              + "\r\n"              + "write_read_username:"              + ortherContext.getSharedPreferences(                  "ct_cp_private","marry_write_read") + "\r\n");        } catch (nameNotFoundException e) {          // Todo auto-generated catch block          e.printstacktrace();        }      }    });  }  @OverrIDe  public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main,menu);    return true;  }}

使用Preferences时有以下需要注意的地方:

1、 通过Context.getSharedPreferences(String filename,int mode)方法,可以打开一个xml文件,文件的位置在/data/data/package_name/shared_prefs/filename.xml,如果不存在,则会自动创建。可以对该文件进行读写 *** 作,在应用内的各组件之间共享数据。如果将mode设置为Context.MODE_WORLD_READ或者Context.MODE_WORLD_WRITE,则还可以被其他应用访问到。不过这不是androID推荐的方式,要实现跨应用共享数据,推荐的方式是用ContentProvIDer实现

2、 如果要访问另一个应用创建的shared_prefs文件,需要满足2个条件,首先另一个应用要设置MODE_WORLD_READMODE_WORLD_WIRTE权限,并且要知道另一个应用的package_name,然后就可以通过Context.createPackageContext()方法,就可以得到另一个应用的context,然后context.getSharedPreferences()方法,就可以打开shared_prefs文件了。不过这种方法并不推荐

3、 在罕见的情况下,如果既把shared_prefs的权限设置为MODE_PRIVATE,又希望某些其他的应用可以访问到,那么可以在manifest文件中配置androID:user_ID(好像是这个属性),让多个应用共享USER_ID。因为本质上shared_prefs文件是采用linux的权限控制的,MODE_PRIVATE类似于-rw-------,所以如果多个应用使用了同一个USER_ID,自然都对这个文件有访问权限了

更多关于AndroID相关内容感兴趣的读者可查看本站专题:《Android数据库 *** 作技巧总结》、《Android编程之activity *** 作技巧总结》、《Android文件 *** 作技巧汇总》、《Android编程开发之SD卡 *** 作方法汇总》、《Android开发入门与进阶教程》、《Android资源 *** 作技巧汇总》、《Android视图View技巧总结》及《Android控件用法总结》

希望本文所述对大家AndroID程序设计有所帮助。

总结

以上是内存溢出为你收集整理的Android数据持久化之Preferences机制详解全部内容,希望文章能够帮你解决Android数据持久化之Preferences机制详解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存