博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读、写其他应用的SharedPreferences
阅读量:5891 次
发布时间:2019-06-19

本文共 4552 字,大约阅读时间需要 15 分钟。

hot3.png

读取其他程序的SharedPreferences一般步骤:

通过CreatPackageContext()创建其他程序对应的Context
通过这个Context的getSharedPreferences()方法获取对应的SharedPreferences对象
如果需要写入数据,调用SharedPreferences的edit()方法获取对应的Editor对象
3个访问必需条件
共享者需要将SharedPreferences的访问模式设置为全局读或写
访问者需要知道共享者的包名称和SharedPreferences名称
访问者需要确切知道每个数据的名称和数据类型,用以正确读取数据

读、写其他应用的SharedPreferences

 Context myContext=null;//生成全局变量
SharedPreferences perfer;
SharedPreferences.Editor editor;

myContext=createPackageContext("cn.edu.zwu.tel",Context.CONTEXT_IGNORE_SECURITY);//注意这句要进行异常处理,访问者需要知道共享者的包名称

perfer=myContext.getSharedPreferences("lgs000", Context.MODE_WORLD_READABLE+ Context.MODE_WORLD_WRITEABLE); //第一个参数是得到那个文件,第二个参数是可以对文件可读可写
editor=perfer.edit();//创建可编辑对象

perfer.getString("name",null)//读显示内容

editor.putString("name", zh);//写入内容

editor.commit();//每次写完要注意保存

具体代码:

View Code
复制代码
1 package cn.zj.nb.wl; 2  3 import android.app.Activity; 4 import android.content.Context; 5 import android.content.SharedPreferences; 6 import android.content.pm.PackageManager.NameNotFoundException; 7 import android.os.Bundle; 8 import android.util.Log; 9 import android.view.View;10 import android.view.View.OnClickListener;11 import android.widget.Button;12 import android.widget.EditText;13 import android.widget.Toast;14 15 public class SharedPreTest02Activity extends Activity {
16 Context myContext=null;17 SharedPreferences perfer;18 SharedPreferences.Editor editor;19 EditText edtzh,edtmm,edtdh;20 Button btngg,btndq;21 Toast toast;22 // int mode=MODE_WORLD_READABLE+MODE_WORLD_WRITEABLE; 23 @Override24 public void onCreate(Bundle savedInstanceState) {
25 super.onCreate(savedInstanceState);26 setContentView(R.layout.main); 27 try {
28 myContext=createPackageContext("cn.edu.zwu.tel",Context.CONTEXT_IGNORE_SECURITY);29 } catch (NameNotFoundException e) 30 {
31 e.printStackTrace();32 }33 34 perfer=myContext.getSharedPreferences("lgs000", Context.MODE_WORLD_READABLE+ Context.MODE_WORLD_WRITEABLE);35 editor=perfer.edit();36 edtzh=(EditText)findViewById(R.id.edtzh);37 edtmm=(EditText)findViewById(R.id.edtmm);38 edtdh=(EditText)findViewById(R.id.edtdh);39 btngg=(Button)findViewById(R.id.btngg);40 btndq=(Button)findViewById(R.id.btndq);41 42 btngg.setOnClickListener(myListener);43 btndq.setOnClickListener(myListener);44 }45 OnClickListener myListener=new OnClickListener() {
46 @Override47 public void onClick(View v) {
48 String zh=edtzh.getText().toString();49 String mm=edtmm.getText().toString();50 String dh=edtdh.getText().toString();51 switch(v.getId())52 {
53 case R.id.btndq:54 if(perfer.contains("account")&&perfer.contains("password")&&perfer.contains("phone"))55 {
56 edtzh.setText(perfer.getString("account",null));57 edtmm.setText(perfer.getString("password",null));58 edtdh.setText(perfer.getString("phone",null));59 } 60 else 61 {
62 toast=Toast.makeText(SharedPreTest02Activity.this,63 "配置信息不存在或不完整!", 5000);64 toast.show();65 }66 return;67 case R.id.btngg:68 editor.putString("account", zh);69 editor.putString("password", mm);70 editor.putString("phone", dh);71 72 Log.v("Cat",zh);73 editor.commit();74 toast=Toast.makeText(SharedPreTest02Activity.this,75 "你的帐号:"+zh+76 " 密码:"+mm+77 " 电话:"+dh, 5000);78 toast.show();79 edtzh.setText("");80 edtmm.setText("");81 edtdh.setText("");82 return;83 }84 85 }86 };87 }
复制代码

效果图:

出现一个问题:当在写入数据时,原来的xml文件的内容并没有改变,Logcat输出:ApplicationContext Couldn‘t Rename fill data/data .../shared_prefs

原因:SharedPreTest02Activity和cn.edu.zwu.tel不在同一进程中,不能修改其中的信息,在SharedPreTest02Activity的manifest文件中添加

形如

<activity ...

    android:process="cn.edu.zwu.tel"  />代码

 

转载于:https://my.oschina.net/u/572562/blog/62019

你可能感兴趣的文章
3.1链表----链表(Linked List)入门
查看>>
[布局] bootstrap基本标签总结
查看>>
异步编程思想
查看>>
"数学口袋精灵"bug(团队)
查看>>
2017python第六天作业 面向对象 本节作业: 选课系统
查看>>
vue实现单页应用demo
查看>>
【找规律】Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1...
查看>>
【最短路】【spfa】CDOJ1633 去年春恨却来时,落花人独立,微雨燕双飞
查看>>
Scribes:小型文本编辑器,支持远程编辑
查看>>
HDU 1065 - I Think I Need a Houseboat
查看>>
为什么要使用 SPL中的 SplQueue实现队列
查看>>
文件的相关操作(创建、打开、写入、读出、重命名)
查看>>
Redis与memecache的区别
查看>>
品尝阿里云容器服务:用nginx镜像创建容器,体验基于域名的路由机制
查看>>
PHP const关键字
查看>>
设计模式之代理模式之二(Proxy)
查看>>
链接&装载&库-入口函数和程序初始化
查看>>
windows环境下安卓开发环境的快速搭建
查看>>
ssh 安装笔记
查看>>
css的再深入6(更新中···)
查看>>