任何一个应用程序都要依赖数据存储,而且这种存储必须不丢失数据,并且有效、简便使用和更新这些数据。在 Android 操作系统中一共提供了4种数据存储方式,但是由于存储的这些数据都是私有的,所以如果需要共享其他应用程序的数据,就需要我们上篇文章说到的 Content Provider。4种数据存储方式分别为如下:
在Android中可能需要将数据保存在本地的手机上面的文件中可以采用两种方式:
1.采用Java IO方式写文件实现:
/**
* 从文件中读取数据,这是很简单的java应用,IO操作
* @return
*/
private String read()
{
try
{
//打开文件输入流
FileInputStream fis = openFileInput(FILE_NAME);
byte[] buffer = new byte[1024];
int hasRead = 0;
StringBuffer sb = new StringBuffer();
while((hasRead = fis.read(buffer)) > 0){
sb.append(new String(buffer, 0, hasRead));
}
return sb.toString();
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* 将数据写入文件,也是很简单的IO操作
* @param string
*/
private void write(String string)
{
try
{
//以覆盖方式打开文件输出流
FileOutputStream fos = openFileOutput(FILE_NAME, 0);
//将FileOutputStream包装成PrintStream
PrintStream ps = new PrintStream(fos);
//输出文件内容
ps.println(string);
ps.close();
} catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
2.采用SharedPreferences的方式实现
@Override
protected void onCreate(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.shared_preferences);
//获取只能被本程序读,写的SharedPreferences对象
preferences = getSharedPreferences("shared", 0);
//获取SharedPreferences的edit对象
edit = preferences.edit();
str = "悟空杀死了" + count + "只妖怪.";
text = (TextView)findViewById(R.id.textView1);
text.setText(str);
edit_text = (EditText)findViewById(R.id.editText1);
edit_text.setText(String.valueOf(count));
add = (Button)findViewById(R.id.addOne);
add.setOnClickListener(this);
read_edit = (Button)findViewById(R.id.read_edit);
read_edit.setOnClickListener(this);
save = (Button)findViewById(R.id.save);
save.setOnClickListener(this);
read = (Button)findViewById(R.id.read);
read.setOnClickListener(this);
clear = (Button)findViewById(R.id.clear);
clear.setOnClickListener(this);
}
//按钮事件监听
@Override
public void onClick(View v)
{
switch(v.getId()){
//悟空又打死了一个妖怪按钮事件
case R.id.addOne:
//妖怪数量加1
count++;
//刷新TextView和EditText控件中的值
refresh();
break;
//读取Edit中的数据按钮事件
case R.id.read_edit:
//取出存在SharedPreferences中的值
count =Integer.parseInt(edit_text.getText().toString());
refresh();
break;
case R.id.save:
//将悟空打死妖怪的数量存入SharedPreferences中
edit.putString("number", String.valueOf(count));
edit.commit();
break;
case R.id.read:
//从SharedPreferences中取出悟空打死妖怪的数量
count =Integer.valueOf(preferences.getString("number", "0"));
refresh();
break;
case R.id.clear:
//清除SharedPreferences中所有的数据
edit.clear();
edit.commit();
count = 0;
refresh();
break;
}
}