SharedPreferences 保存的数据主要是类似于配置信息格式的数据,因此他保存的数据主要是简单的 k-v 对。
SharedPreferences接口主要负责读取应用程序的Preferences数据,它提供了如下的常用方法:
SharedPreferences接口本身没有提供写入数据的能力,而是通过SharedPreferences的内部接口,调用edit()方法即可获得它所对应的Editor对象。提供以下的方法来写入数据。
Commit:当Editor编辑完成后,调用该方法提交修改。
从用法角度来看,SharedPreferences和Editor组合起来非常像Map,其中SharedPreferences用来读取数据,而Editor用来写入数据。
创建一个SharedPreferences:
它本身是一个接口,无法直接创建实例,只能通过Contex提供的getSharedPreferences(String name , int mode)来获取SharedPreferences实例。第二个参数支持如下几个值:
Contex.MODE_PRIVATE:指定该SharedPreferences数据只能被本应用程序读、写。
Contex.MODE_WORLD_READABLE:指定该SharedPreferences数据能被其他应用程序读,但不能写。
Contex.MODE_WORLD_WRITEABLE:指定该SharedPreferences数据能被其他应用程序读写。
小例子:随机数的写入与读取
程序中只有两个Button,一个用来写入数据,一个用来读取数据,故此不再给出布局代码。
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
/**
*
* @author Caesar
*
*/
public class MainActivity extends Activity {
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences("crazyit", MODE_WORLD_READABLE);
editor = preferences.edit();
Button read, write;
write = (Button) findViewById(R.id.write);
read = (Button) findViewById(R.id.read);
read.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// 读取字符串数据
String time = preferences.getString("time", null);
// 读取int类型的数据
int randomNum = preferences.getInt("random", 0);
String result = time == null ? "您暂时还未写入数据" : "写入时间为 : " + time
+ "\n 上次生成的随机数是:" + randomNum;
Toast.makeText(MainActivity.this, result, 0).show();
}
});
write.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
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();
}
});
}
}
记录程序的使用次数:
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
/**
* 记录应用程序的使用次数:
*
* @author Caesar
*
*/
public class MainActivity extends Activity {
SharedPreferences preferences;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
preferences = getSharedPreferences("count", MODE_WORLD_READABLE);
editor = preferences.edit();
int count = preferences.getInt("count", 0);
Toast.makeText(MainActivity.this, "程序已被使用 : " + count + "次", 0).show();
editor.putInt("count", ++count);
editor.commit();
}
}
读写其他应用的SharedPreferences:
前提:指定权限
步骤:
1.需要创建其他程序对应的Contex
2.调用其他应用程序的COntex的getSharedPreferences(String name , int mode) 即可获取响应的SharedPreferences对象
3.如果需要向其他应用的SharedPreferences数据写入数据,调用SharedPreferences的edit方法获取响应的Editor即可
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
/**
*
* @author Caesar
*
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Context useCount = null;
try {
//获取其他应用程序锁对应的Contex
useCount = createPackageContext(
"com.example.sharedpreferencesdemo2",
Context.CONTEXT_IGNORE_SECURITY);
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//使用其他程序的Contex获取对应的SharedPreferences
SharedPreferences preferences = useCount.getSharedPreferences("count",
Context.MODE_WORLD_READABLE);
int count = preferences.getInt("count", 0);
TextView show = (TextView) findViewById(R.id.show);
show.setText("SharedPreferencesDemo2 已经被使用 " + count + " 次");
}
}
Android---34---SharedPreferences
原文:http://blog.csdn.net/u013476556/article/details/45440957