所有应用程序都必须涉及数据的输入、输出,Android应用也不例外,应用程序的参数设置、程序运行状态数据都需要保存在外部存储器上,这样系统关机之后数据才不会丢失。如果应用程序有少量数据需要存储,那么使用普通文件就可以了;但如果应用程序有大量数据可以存储、访问,就需要借助于数据库了。Android系统内置了SQLite数据库,SQLite数据库是一个真正轻量级的数据库,他没有后台进程,整个数据库就对应于一个文件,这样可以非常方便的在不同设备之间移植。
有些时候,应用程序有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串、标量类型的值等,比如应用程序的各种配置信息(如是否打开音效、是否使用振动效果等)、小游戏的玩家积分(如扫雷英雄榜之类的),对于这样数据,android提供了SharedPreferences进行保存。
下面简单讲解一下SharedPreferences,这里简单示范如何向SharedPreferences中写入、读取数据,改程序的界面很简单,提供两个按钮,其中一个用于写入数据;另一个用于读取数据(此处不再给出):
package org.crazyit.io;
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.Button;
import android.widget.Toast;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainActivity extends Activity
{
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取只能被本应用程序读、写的SharedPreferences对象
preferences = getSharedPreferences("crazyit", MODE_PRIVATE);
editor = preferences.edit();
Button read = (Button) findViewById(R.id.read);
Button write = (Button) findViewById(R.id.write);
read.setOnClickListener(new OnClickListener()
{
@Override
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(MainActivity.this, result
, Toast.LENGTH_SHORT).show();
}
});
write.setOnClickListener(new OnClickListener()
{
@Override
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();
}
});
}
}
注:由于SharedPreferences不支持date类型的值,故程序使用了SimpleDateFormat将date格式化成字符串后写入。
重要的一点:editor必须提交之后才会存入数据。