有时候,应用程序有少量数据需要保存,比如说是否使用振动,是否打开GPS等设置,对于这些小数据量的需求,没有必要使用数据库
Android提供了SharedPreferences接口,它用来读取程序的Preferences数据,它保存的数据主要是简单的key-vaule对
有如下方法来访问key-value对
boolean contains(String key) 判断是否包含特定key的数据
abstract Map<String,?> getAll() 获取SharedPreferences数据里面全部的key-value对
getXxx(String Key,xxx defValue) 判断是否包含特定key的数据,如果不包含,返回默认值得defValue,Xxx为数据类型
SharedPreferences本身没有提供写入数据的能力,而是通过内部接口调用edit()方法即可获取它所对应的Editor对象
Editor提供如下方法来向SharedPreferences写入数据
clear() 清空SharedPreferences所有数据
putXxx(String key,xxx value) 向SharedPreferences存入指定key对应的数据
remove(String key) 向SharedPreferences删除指定key对应的数据
boolean commit() 当Editor编辑完成后,调用该方法提交修改
通过Context提供的getSharedPreferences(String name,int mode) 来获取SharedPreferences
第二个参数有如下几个值:
Context.MODE_PRIVATE: 指定数据只能被本应用程序读写
Context.MODE_WORLD_READABLE: 指定数据能被其它应用程序读,但不能写
Context.MODE_WORLD_WRITEABLE: 指定数据能被其它应用程序读和写
下面程序向Preferences写入当前时间和一个随机数
Android提供了SharedPreferences接口,它用来读取程序的Preferences数据,它保存的数据主要是简单的key-vaule对
有如下方法来访问key-value对
boolean contains(String key) 判断是否包含特定key的数据
abstract Map<String,?> getAll() 获取SharedPreferences数据里面全部的key-value对
getXxx(String Key,xxx defValue) 判断是否包含特定key的数据,如果不包含,返回默认值得defValue,Xxx为数据类型
SharedPreferences本身没有提供写入数据的能力,而是通过内部接口调用edit()方法即可获取它所对应的Editor对象
Editor提供如下方法来向SharedPreferences写入数据
clear() 清空SharedPreferences所有数据
putXxx(String key,xxx value) 向SharedPreferences存入指定key对应的数据
remove(String key) 向SharedPreferences删除指定key对应的数据
boolean commit() 当Editor编辑完成后,调用该方法提交修改
通过Context提供的getSharedPreferences(String name,int mode) 来获取SharedPreferences
第二个参数有如下几个值:
Context.MODE_PRIVATE: 指定数据只能被本应用程序读写
Context.MODE_WORLD_READABLE: 指定数据能被其它应用程序读,但不能写
Context.MODE_WORLD_WRITEABLE: 指定数据能被其它应用程序读和写
下面程序向Preferences写入当前时间和一个随机数
package WangLi.IO.SharedPreferencesTest;
import java.util.Date;
import java.text.SimpleDateFormat;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class SharedPreferencesTest extends Activity {
SharedPreferences preferences;
SharedPreferences.Editor editor;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取只能被本应用程序读,写的SharedPreferences对象
preferences = getSharedPreferences("IO",MODE_PRIVATE);
editor = preferences.edit();
Button read = (Button)findViewById(R.id.read);
Button write = (Button)findViewById(R.id.write);
read.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
//读取字符串数据
String time = preferences.getString("time", null);
//读取int类型的数据
int randNum = preferences.getInt("random", 0);
String result = time == null ? "您暂时还未写入数据"
: "写入时间为:" + time
+ "\n 上次生成的随机数为:" + randNum;
//使用Toast提示信息
Toast.makeText(SharedPreferencesTest.this, result, 5000).show();
}
});
write.setOnClickListener(new OnClickListener()
{
public void onClick(View arg0)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日" + "hh:mm:ss");
//存入当前时间
editor.putString("time", sdf.format(new Date()));
//存入一个随机数
editor.putInt("random", (int)(Math.random() * 100));
//提交所有存入的数据
editor.commit();
}
});
}
}
存储好的Preferences可以在DDMS的File Explorer 中找到
导出文件打开,里面就是刚刚写入的Key-Value
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<map>
<int name="random" value="73" />
<string name="time">2012年09月06日03:08:07</string>
</map>