public class SharedPreferencesTestActivity extends Activity {
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
preferences = getSharedPreferences("count", MODE_WORLD_WRITEABLE);
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 v) {
String time = preferences.getString("time", null);
//根据key得到数据
int count=preferences.getInt("count",0);
int randnum = preferences.getInt("random", 0);
String result = time == null ? "您暂时还没输入数据" : "写入的时间为:" + time
+ "\n上次生成的随机数为: " + randnum+"/n登陆次数为:"+count;
Toast.makeText(SharedPreferencesTestActivity.this, result, 5000)
.show();
}
});
write.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"
+ "hh:mm:ss");
int count=preferences.getInt("count",0);
editor.putString("time", sdf.format(new Date()));
editor.putInt("random", (int) (Math.random() * 10));
editor.putInt("count",++count);
editor.commit();
}
});
}
}
在这个程序中写入三个key 分别为count 和random和time 通过 Toast.makeText().show();在这个程序中显示
另一个程序获取这个程序存储的数据,并修改这个文件,增加key为name的 把名字设置成bill1,具体代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Context useCount=null;
try {
//test.sharePreferences为上一个程序的包名,此处万不能指定错
useCount=createPackageContext("test.sharePreferences",Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//获取Sharedpreferences对象,此处count为文件名,即count.xml
SharedPreferences prefs=useCount.getSharedPreferences("count",Context.MODE_WORLD_WRITEABLE);
int count=prefs.getInt("count",100);
String time=prefs.getString("time", null);
System.out.println("count-------------"+count);
System.out.println("time-------------"+time);
//3个TextView 用来显示不同的信息
TextView show1=(TextView)findViewById(R.id.show1);
TextView show2=(TextView)findViewById(R.id.show2);
TextView show3=(TextView)findViewById(R.id.show3);
show1.setText("应用程序 以前被使用了"+count+"次");
show2.setText("time:"+time);
//Editor 用来编辑数据 增加name
Editor editor=prefs.edit();
editor.putString("name","bill1");
editor.commit();
String name=prefs.getString("name", null);
show3.setText("名字:"+name);
}
当然,我们也可以在第一个程序里放入name,在后一个里修改这个key
总结:
1,Android根据应用程序的报名来作为该程序的标识的,所以我们获取另一个程序的数据必须根据
Context useCount=createPackageContext("test.sharePreferences",Context.CONTEXT_IGNORE_SECURITY);
来获取另一个程序的Context,再根据Context的getSharedPreferences(文件名,权限)获取对象
2,SharedPreferences对象根据getString,getInt来获取文件下的指定key
3,如果想往文件下写字段,则必须通过
Editor editor=prefs.edit();
获取Editor对象,通过editor.putString()或者putInt()来放入字段
4,本来这是个很简单的实验,但是有个细节,让我调了2 3个小时,几近崩溃的地步,
在main。xml中 由于
<TextView
android:id="@+id/show1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
指定的宽和高都设置成fill_parent导致只能显示一个textView
细节性东西还需要注意。
在学习Android的路上继续努力!!!