Android数据持久化之偏好机制详解

  

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

  

在Android中,实现数据持久化有五种方式:偏好、文件文件I/O操作,SQLite数据库,ContentProvider组件。

  

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

  

  

偏好是一种轻量级的数据存储机制,他将一些简单的数据类型的数据,包括布尔类型,int类型,浮点类型,长类型以及字符串类型的数据,以键值对的形式存储在应用程序的私有偏好目录(/数据/数据/& lt;包名祝辞/shared_prefs/)中,这种偏好机制广泛应用于存储应用程序中的配置信息。

  

如下是偏好的一个简单代码:

  

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

        包com.example.data_sharedpreferences;   进口android.os.Bundle;   进口android.app.Activity;   进口android.content.Context;   进口android.content.SharedPreferences;   进口android.view.Menu;   进口android.view.View;   进口android.view.View.OnClickListener;   进口android.widget.Button;   进口android.widget.TextView;   公开课MainActivity延伸活动{   私人TextView文本;   私人按钮按钮;   @Override   保护空白>   包com.example.data_sharedpreferences2;   进口com.example.data_sharedpreferences2.R;   进口android.os.Bundle;   进口android.app.Activity;   进口android.content.Context;   进口android.content.pm.PackageManager.NameNotFoundException;   进口android.view.Menu;   进口android.view.View;   进口android.view.View.OnClickListener;   进口android.widget.Button;   进口android.widget.TextView;/* *   *该程序的功能是访问data_sharedpreferences应用Sharedpreferences访问另一个应用的条件:   * 1,被访问的应用权限为可读或者可写2,必须要知道被访问应用的包名   *   * @author结婚   *   */公开课MainActivity延伸活动{   私人TextView文本;   私人按钮按钮;   @Override   保护无效onCreate(包savedInstanceState) {   super.onCreate (savedInstanceState);   setContentView (R.layout.activity_main);   文本=(TextView) findViewById (R.id.text);   按钮=(按钮)findViewById (R.id.button0);   按钮。setOnClickListener OnClickListener(新(){   @Override   公共空间onClick(查看v) {//访问应用1,并读取应用1的数据   尝试{//获得要访问应用的上下文   上下文ortherContext=createPackageContext (   com . example。”data_sharedpreferences ", 0);//通过ortherContext.getSharedPreferences打开应用1的文件   text.setText (“private_username:“   + ortherContext.getSharedPreferences (   “ct_cp_private”, 0) .getString(“用户名”,   “marry_private”)   + " \ r \ n”   + " read_username:“   + ortherContext.getSharedPreferences (   “ct_cp_private”, 0) .getString(“用户名”,   “marry_only_read”)   + " \ r \ n”   + " write_username:“   + ortherContext.getSharedPreferences (   “ct_cp_private”, 0) .getString(“用户名”,   “marry_only_write”)   + " \ r \ n”   + " write_read_username:“   + ortherContext.getSharedPreferences (   “ct_cp_private”, 0) .getString(“用户名”,   )+“marry_write_read \ r \ n”);   }捕捉(NameNotFoundException e) {//TODO自动生成的catch块   e.printStackTrace ();   }   }   });   }   @Override   公共布尔onCreateOptionsMenu菜单(菜单){//增加菜单;这将条目添加到操作栏是否存在。   getMenuInflater () .inflate (R.menu。主菜单);   返回true;   }   }      之前      

  

1,通过<代码>上下文。getSharedPreferences (String文件名,int模式)方法,可以打开一个xml文件,文件的位置在/数据/数据/package_name/shared_prefs/fileName.xml,如果不存在,则会自动创建。可以对该文件进行读写操作,在应用内的各组件之间共享数据。如果将模式设置为或者,则还可以被其他应用访问到。不过这不是android推荐的方式,要实现跨应用共享数据,推荐的方式是用ContentProvider实现

  

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

  

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

Android数据持久化之偏好机制详解