本文的主要内容是介绍Android 数据存储与IO之SharedPreferences的使用,方便今后使用。
1.MainActivity.java
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();
}
});
}
}
2.布局文件:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="60dip"
android:textStyle="bold"
android:textSize="20dip"
android:text="数据存储SharedPreferences测试"
android:layout_gravity="center"/>
<Button
android:id="@+id/write"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="写入数据"
/>
<Button
android:id="@+id/read"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="读取数据"
/>
</LinearLayout>
补充:
SharedPreferences是Android SDK中最容易理解和使用的存储技术。保存key-value对首先要指定一个文件名,然后使用putString的方法指定key和value。SharedPreferences也采用了同样的方法。
- 使用Activity.getSharedPreferences方法获得SharedPreferences对象。其中存储key-value的文件名称由getSharedPreferences方法的第一个参数指定。
- 使用SharedPreferences.edit方法获得SharedPreferences.Edit对象。
- 通过SharedPreferences.Editor.putXxx方法保存key-value对。
- 通过SharedPreferences.Editor.commit方法key-value对。commit方法相当于数据库事件中的提交(commit)操作,只有在任务结束后提交,才会将数据真正保存在数据库中。保存key-value也是一样,在使用putXxx方法指定了key-value对后,必须调用commit方法才能将key-value对真正保存在相应的文件中。
获取SharedPreferences的两种方式:
1 调用Context对象的getSharedPreferences()方法
2 调用Activity对象的getPreferences()方法
两种方式的区别:
调用Context对象的getSharedPreferences()方法获得的SharedPreferences对象可以被同一应用程序下的其他
组件共享.
调用Activity对象的getPreferences()方法获得的SharedPreferences对象只能在该Activity中使用.
SharedPreferences的四种操作模式:
Context.MODE_PRIVATE
Context.MODE_APPEND
Context.MODE_WORLD_READABLE
Context.MODE_WORLD_WRITEABLE
Context.MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Context.MODE_APPEND:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件.
Context.MODE_WORLD_READABLE和Context.MODE_WORLD_WRITEABLE用来控制其他应用是否有权限读写该文件.
MODE_WORLD_READABLE:表示当前文件可以被其他应用读取.
MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入.
将数据保存至SharedPreferences:
SharedPreferences preferences=getSharedPreferences("user",Context.MODE_PRIVATE);
Editor editor=preferences.edit();
String name="xixi";
String age="22";
editor.putString("name", name);
editor.putString("age", age);
editor.commit();
从SharedPreferences获取数据:
SharedPreferences preferences=getSharedPreferences("user", Context.MODE_PRIVATE);
String name=preferences.getString("name", "defaultname");
String age=preferences.getString("age", "0");
记录应用程序的使用次数
public class MainActivity extends Activity
{
SharedPreferences preferences;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
preferences = getSharedPreferences("count"
, MODE_PRIVATE);
// 读取SharedPreferences里的count数据
int count = preferences.getInt("count", 0);
// 显示程序以前使用的次数
Toast.makeText(this, "程序以前被使用了" + count + "次。"
, Toast.LENGTH_LONG).show();
SharedPreferences.Editor editor = preferences.edit();
// 存入数据
editor.putInt("count", ++count);
// 提交修改
editor.commit();
}
}