【android】跨应用的sharepreference数据共享

创建两个工程,一个是 com.sharepreference.write (A应用) 用于写入数据,另外一个是 com.sharepreference.read (B应用) 用于读取数据,下面分别看看两个工程的关键代码:

(A)写入数据的代码:

  1. //按钮  
  2.         Button btnWrite=(Button)findViewById(R.id.btnWrite);  
  3.         //输入框  
  4.         final EditText et=(EditText)findViewById(R.id.editValue);  
  5.         //创建sp对象,模式是 MODE_WORLD_READABLE  
  6.         final SharedPreferences sp=getSharedPreferences("test_sp",MODE_WORLD_READABLE);  
  7.         final Editor editor=sp.edit();  
  8.         btnWrite.setOnClickListener(new OnClickListener() {  
  9.               
  10.             @Override  
  11.             public void onClick(View v) {  
  12.                 //写入并提交  
  13.                 editor.putString("name", et.getText()+"");  
  14.                 editor.commit();  
  15.                   
  16.                 Toast.makeText(MainActivity.this,sp.getString("name"""),Toast.LENGTH_SHORT).show();  
  17.             }  
  18.         });  

(B)读取数据的代码:
  1. //按钮  
  2.         Button btnRead = (Button) findViewById(R.id.btnRead);  
  3.         //显示数据的文本框  
  4.         final TextView tv = (TextView) findViewById(R.id.txtValue);  
  5.         Context context=null;  
  6.         try {  
  7.             //创建上下文,指定宿主应用的包名以及 忽略系统的安全过滤,这点切勿忽视!  
  8.             context=createPackageContext("com.sharepreference.write", Context.CONTEXT_IGNORE_SECURITY);  
  9.         } catch (NameNotFoundException e) {  
  10.             e.printStackTrace();  
  11.         }  
  12.         sp=context.getSharedPreferences("test_sp", MODE_WORLD_READABLE);  
  13.         btnRead.setOnClickListener(new OnClickListener() {  
  14.             @Override  
  15.             public void onClick(View v) {  
  16.                 Log.i("Read",sp.getString("name",""));  
  17.                 //读取数据  
  18.                 String name = sp.getString("name""");  
  19.                 if (name != "") {  
  20.                     tv.setText(sp.getString("name"""));  
  21.                 } else {  
  22.                     tv.setText("尚未写入值");  
  23.                 }  
  24.             }  
  25.         });  
数据共享的代码就这么简单!

问题:

A应用写入后,第一次B应用能够正确读取到数据,第二次再从A应用修改数据的时候 为啥B应用还是拿到旧的数据? (没有退出应用的前提下)

答案是:这种跨应用的共享,B应用是一次性读进了内存,在应用程序杀掉之前,都是从内存中拿的,所以实际上是B应用将其缓存下来了。

解决方法:

在B应用中获取sharepreference时, 使用sp=context.getSharedPreferences("test_sp", MODE_MULTI_PROCESS);  就可以得到最新的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值