当前位置: 代码迷 >> Android >> 【Android学习】Android数据的四种存储方式(1)-SharedPreferences
  详细解决方案

【Android学习】Android数据的四种存储方式(1)-SharedPreferences

热度:146   发布时间:2016-04-28 06:29:14.0
【Android学习】Android数据的四种储存方式(1)--SharedPreferences

所有应用程序都必然涉及数据的输入、输出,Android应用也不例外,应用程序的参数设置、程序运行状态数据这些都必须保存到外部储存器上,这样系统关机后数据才不会丢失。当然,对于需要操作数据的多少就应该选择不同的储存方式,因此Android系统共提供了四种数据储存方式,分别为:SharedPreferences,File,SQLite,ContentProvider.

SharedPreferences:除了SQLite数据库外,SharedPreferences也是一种轻型的数据储存方式,它的本质是基于XML文件存储key-value键值对数据,通常用来储存一些简单的配置信息。SharedPreferences接口本身并没有提供写入数据的能力,而是通过SharedPreferencesde的内部接口,SharedPreferences调用edit()方法即可获取它所对应的Editor对象。实现SharedPreferences储存的步骤如下:

1、获取SharedPreferences对象

2、利用edit()方法获取Editor对象

3、通过Editor对象储存key-value键值对数据

4、通过commit()方法提交数据

例一:下面的代码储存三个数据,分别为String,Int,Boolean型,具体如下:

package com.ye_yun_lin.sharedpreferencestest;import android.os.Bundle;import android.preference.Preference;import android.app.Activity;import android.content.SharedPreferences;import android.view.Menu;public class MainActivity extends Activity {	private SharedPreferences sharedPreferences;	private SharedPreferences.Editor editor;		@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				sharedPreferences=getSharedPreferences("My_XML", MODE_WORLD_READABLE);		editor=sharedPreferences.edit();				editor.putString("String_key", "string");		editor.putInt("Int_key", 3);		editor.putBoolean("Boolean_key", true);				editor.commit();	}}

这段代码执行完后,在/data/data/com.ye_yun_lin.SharedPrefer/shared_prefs目录下生成了一个SP.My_XML文件,一个应用可以创建多个这样的文件。用DDMS界面的导出文件按钮,导出后打开如下:



例二:记录应用程序的使用次数:

这个实例可以记住应用程序的使用次数,当用户第一次启动该程序时,系统创建SharedPreferences来记录使用次数。用户以后启动该应用程序时,系统先读取SharedPreferences中的使用次数,然后将使用次数加1.代码如下:

package com.ye_yun_lin.usecount;import android.R.integer;import android.os.Bundle;import android.preference.Preference;import android.app.Activity;import android.content.SharedPreferences;import android.view.Menu;import android.widget.Toast;public class MainActivity extends Activity {	private SharedPreferences sharedPreferences;	private SharedPreferences.Editor editor;	private int count;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				sharedPreferences=getSharedPreferences("count",MODE_WORLD_WRITEABLE);		editor=sharedPreferences.edit();				count=sharedPreferences.getInt("count", 0);		Toast.makeText(this, "该应用程序被使用了"+count+"次!", Toast.LENGTH_LONG).show();		editor.putInt("count", ++count);				editor.commit();	}}

例三:读写其他应用SharedPreferences。

要读或写其他程序的SharedPreferences,前提是要创建该应用程序指定相应的访问权限。比如MODE_WORLD_READABLE(只可被其他程序读),MODE_WORLD_WRITABLE(可被其他程序读或写).其步骤如下:

1、需要创建其他程序对应的Context,例如如下代码:

useContext=createPackageContext("com.ye_yun_lin.usecount", Context.CONTEXT_IGNORE_SECURITY);

上面的com.ye_yun_lin就是其他程序的包名

2、条用其他程序的Context的getSharedPreferences()即可获取相应的SharedPreferences对象

3、如果需要向其他应用的SharedPreferences数据写入数据,调用SharedPreferences的edit()方法获取相应的editor即可。

代码如下:

package comye_yun_line.useotherpreferences;import android.os.Bundle;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.content.pm.PackageManager.NameNotFoundException;import android.view.Menu;import android.widget.TextView;public class MainActivity extends Activity {	private Context useContext=null;	private SharedPreferences preferences;	private int count;	private TextView textView;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);					try {				useContext=createPackageContext("com.ye_yun_lin.usecount", Context.CONTEXT_IGNORE_SECURITY);			} catch (NameNotFoundException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}		preferences=useContext.getSharedPreferences("count", Context.MODE_WORLD_READABLE);		count=preferences.getInt("count", 0);				textView=(TextView)findViewById(R.id.textview);		textView.setText(count+"");	}}

SharedPreferences对象与SQLite数据库相比,免去了创建数据库、创建表、写SQL语句等操作,相对而言更加方便简洁。但是SharedPreferences也有其自身的缺陷,比如只能储存boolean,int,string,float,long五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据储存多么简洁,也只能是储存方式的一种补充,而无法完全代替SQLite数据库这样的储存方式。


  相关解决方案