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