SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。

SharedPreferences保存数据,其背后是用xml文件存放数据,文件存放在/data/data/<package name>/shared_prefs目录下:

一、首先分析几个方法:

1、getSharedPreferences(name,mode)

方法的第一个参数用于指定该文件的名称,名称不用带后缀,后缀会由Android自动加上;

方法的第二个参数指定文件的操作模式,共有六种操作模式。

六种操作模式分别为:

1). MODE_APPEND: 追加方式存储

2). MODE_PRIVATE: 私有方式存储,其他应用无法访问

3). MODE_ENABLE_WRITE_AHEAD_LOGGING   数据库打开默认启用了写前日志记录

4). MODE_MULTI_PROCESS:多个进程间共享,但在2.3之后不再使用了

5). MODE_WORLD_READABLE: 表示当前文件可以被其他应用读取(不推荐使用)

6). MODE_WORLD_WRITEABLE: 表示当前文件可以被其他应用写入(不推荐使用)

SharedPreferences share = getSharedPreferences("lsf", MODE_PRIVATE);   

2、edit()方法获取editor对象

editor存储对象采用key-value键值对进行存放

通过commit()方法提交数据

 SharedPreferences share = getSharedPreferences("jackie", MODE_WORLD_READABLE);   //其他应用可以获得
SharedPreferences.Editor edit = share.edit();
edit.putString(“password”, ""+987654321);
edit.putBoolean("pass_state", true);
edit.commit();

与之对应其他应用获取数据的方法:

otherAppsContext = createPackageContext("com.jackie.contextprovider", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("jackie", Context.MODE_WORLD_READABLE);
String password= sharedPreferences.getString("password", "");
boolean pass_state= sharedPreferences.getBoolean("pass_state", false); //第二个参数为缺省值,如果preference中不存在该key,将返回缺省值
mTextView.setText("password:"+password+"||||||||"+"pass_state:"+pass_state);

如果你想要删除通过SharedPreferences产生的文件,可以通过以下方法:

File file= new File("/data/data/"+getPackageName().toString()+"/shared_prefs","Activity.xml");
if(file.exists()){
file.delete();
Toast.makeText(TestActivity.this, "删除成功", Toast.LENGTH_LONG).show();
}

二、应用实例:

一个应用中设置一个按钮,可按下触发设置为共享或不共享其SharedPreferences产生的文件,

另一个应用通过按钮按下触发获得之前应用中的数据。

1、共享数据文件的应用:

package com.jackie.contextprovider;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button; public class MainActivity extends Activity { public static final String NEW_LIFEFROM_DETECTED = "com.jackie.contextprovider";
public static final String TAG = "testprovider"; private Button snedButton;
private boolean isShare = true; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); snedButton = (Button) findViewById(R.id.send_message);
} public void sendMessage(View v){
if(isShare){
SharedPreferences share = getSharedPreferences("jackie", MODE_WORLD_READABLE);
SharedPreferences.Editor edit = share.edit();
edit.putString(“password”, ""+987654321);
edit.putBoolean("pass_state", true);
edit.commit();
isShare = false;
snedButton.setText(R.string.no_send);
}else{
SharedPreferences share = getSharedPreferences("jackie", MODE_PRIVATE);
SharedPreferences.Editor edit = share.edit();
edit.clear();
edit.commit();
isShare = true;
snedButton.setText(R.string.send);
}
}
}

布局配置文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" > <Button
android:id="@+id/send_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="sendMessage"
android:text="@string/send"
/> </RelativeLayout>

2、读取共享数据的应用

package com.jackie.contextuser;

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.View;
import android.widget.Button;
import android.widget.TextView; public class MainActivity extends Activity { Button mButton;
TextView mTextView;
Context otherAppsContext; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.get_message);
mTextView = (TextView) findViewById(R.id.write_message);
otherAppsContext = null;
} @Override
protected void onResume(){
super.onResume();
otherAppsContext = null;
} @Override
protected void onStop(){
super.onStop();
otherAppsContext = null;
} public void getMessage(View v) throws NameNotFoundException{
otherAppsContext = createPackageContext("com.tcl.contextprovider", Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sharedPreferences = otherAppsContext.getSharedPreferences("jackie", Context.MODE_WORLD_READABLE);
String password = sharedPreferences.getString("password", "");
boolean pass_state= sharedPreferences.getBoolean("pass_state", false);
mTextView.setText("password :"+password +"||||||||"+"pass_state:"+pass_state);
}
}

布局配置文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" > <Button
android:id="@+id/get_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="getMessage"
android:text="@string/get"/> <TextView
android:id="@+id/write_message"
android:layout_below="@id/get_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/> </RelativeLayout>
 
--------------------------------------------------------------------------------------------
刚开始学习,写博客只是希望能记录自己的成长轨迹,欢迎大家指点。

应用间共享数据方法(一)---sharepreferce的更多相关文章

  1. laravel5.5框架中视图间如何共享数据?视图间共享数据的两种方法

    laravel框架中视图间共享数据有两种,一种是用视图门面share()方法实现,另一种是用视图门面composer() 方法实现,那么,两种方法的实现究竟是怎样的呢?让我们来看一看接下来的文章内容. ...

  2. 【转】VC 利用DLL共享区间在进程间共享数据及进程间广播消息

    1.http://blog.csdn.net/morewindows/article/details/6702342 在进程间共享数据有很多种方法,剪贴板,映射文件等都可以实现,这里介绍用DLL的共享 ...

  3. 使用 WM_COPYDATA 在进程间共享数据

    开发中有时需要进程间传递数据,比如对于只允许单实例运行的程序,当已有实例运行时,再次打开程序,可能需要向当前运行的实例传递信息进行特殊处理.对于传递少量数据的情况,最简单的就是用SendMessage ...

  4. Disruptor 线程间共享数据无需竞争

    队列的作用是缓冲 缓冲到 队列的空间里.. 线程间共享数据无需竞争 原文 地址  作者  Trisha   译者:李同杰 LMAX Disruptor 是一个开源的并发框架,并获得2011 Duke’ ...

  5. 【C++】DLL内共享数据区在进程间共享数据(重要)

    因项目需要,需要在DLL中共享数据,即DLL中某一变量只执行一次,在运行DLL中其他函数时该变量值不改变:刚开始想法理解错误,搜到了DLL进程间共享数据段,后面发现直接在DLL中定义全局变量就行,当时 ...

  6. windows核心编程之进程间共享数据

    有时候我们会遇到window进程间共享数据的需求,例如说我想知道系统当前有多少某个进程的实例. 我们能够在程序中定义一个全局变量.初始化为0.每当程序启动后就加1.当然我们我们能够借助第三方介质来储存 ...

  7. Docker学习(九)Volumn容器间共享数据

    Docker学习(九)Volumn容器间共享数据 volume是什么 volume在英文中是容量的意思, 在docker中是数据卷的意思,是用来保存数据的容器 为什么要进行数据共享 在集群中有多台to ...

  8. Java并发基础09. 多个线程间共享数据问题

    先看一个多线程间共享数据的问题: 设计四个线程,其中两个线程每次对data增加1,另外两个线程每次对data减少1. 从问题来看,很明显涉及到了线程间通数据的共享,四个线程共享一个 data,共同操作 ...

  9. python 进程间共享数据 (二)

    Python中进程间共享数据,除了基本的queue,pipe和value+array外,还提供了更高层次的封装.使用multiprocessing.Manager可以简单地使用这些高级接口. Mana ...

随机推荐

  1. python学习--字符串

    python的字符串类型为str 定义字符串可以用 ‘abc' , "abc", '''abc''' 查看str的帮助 在python提示符里 help(str) python基于 ...

  2. JDBC与Hibernate中SQL语句参数设置的顺序问题

    JDBC中:设置从1开始 例: Connection con = DriverManager.getConnection("jdbc:mysql://localhost/...", ...

  3. 解决NGUI自动被设置LYAER

    解决NGUI自动被设置LYAER uiwidget.cs1011行public void checklayer()这里修改 可以让LAYER不跟随父物体变动 但是这里有个问题 摄像机的CULL 不会被 ...

  4. swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念

    ***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...

  5. Java_I/O输入输出_使用输入输出流读取文件,将一段文字加密后存入文件,然后读取,将加密前与后的文件输出

    import java.io.*; public class Example { public static void main(String[] args) { char a[] = "今 ...

  6. Java—泛型

    泛型是JDK 5 中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型.泛型本质是参数化类型,也就是所操作的数据类型指定为一个参数. 假定我们有这样一个需求: ...

  7. ubuntu16.04 orbslam ./build.sh 出错eigen

    错误如下: /home/a/ORB_SLAM2/src/Optimizer.cc:1244:1: required from here/usr/include/eigen3/Eigen/src/Cor ...

  8. 最近在做外贸网站的时候,需要大量的字体来充实页面,就学习了怎么引用Google Fonts

    第一步,FQ进入谷歌官方字体网站:https://fonts.google.com  妥妥的. 第二步,点击你所选择字体演示块的右上角的加号,然后你所选择的字体会形成引用链接以及你所要写的css样式. ...

  9. Yii2.0 rules验证规则大全

    required : 必须值验证属性 [['字段名'],required,'requiredValue'=>'必填值','message'=>'提示信息']; #说明:CRequiredV ...

  10. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...