SharedPreference

创建

  • getPreferences(int mode),属于Activity私有的文件,一个Activity只有一个
  • getSharedPreferences(String name,int mode),以name来区分不同的文件,可以有多个
  • getDefaultSharedPreferences(Context context),属于应用,只有一个

保存

public static final String PREFER_NAME = "TestPreference";
// 该权限在4.0的版本中已经声明弃用了,不再建议通过该方式跨应用共享数据
public static int MODE = Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE;
SharedPreferences preferences = getSharedPreferences(PREFER_NAME, MODE); 
SharedPreferences.Editor editor = preferences.edit();
editor.putString("key", "value");
editor.commit();

使用

  • 同应用中
SharedPreferences preferences = getSharedPreferences(PREFER_NAME, MODE);
if (preferences.contains("key")) {
    preferences.getString("key", "null");
}
  • 不同应用间
Context otherAppContext;

try {
 otherAppContext = createPackageContext(otherPackageName,Context.CONTEXT_IGNORE_SECURITY);
} catch (PackageManager.NameNotFoundException e) {
 e.printStackTrace();
}

SharedPreferences preferences = otherAppContext.getSharedPreferences(PREFER_NAME, MODE);
preferences.getString("key", "null");

但是在实际程序中发现,跨应用的写操作是无法成功的,会提示一个错误:Couldn’t rename file /data/data/….TestSavePreference.XML to /data/data/….TestSavePreference.XML.bak。可以在manifest.xml里面将两个应用程序的android:sharedUserId属性设为相同的就可以了,同时只需要Context.MODE_PRIVATE也可以完成读写操作。但是最好能避免不安全的方式,采用ContentProvider, BroadcastReceiver, Service 等方式实现跨应用的数据共享。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   android:sharedUserId="com.test.sample" >
</manifest>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值