- 浏览: 325438 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xuanyuanxiaoxue:
...
Android - LayoutInflater -
柴兴博:
不错 多谢
Android 悬浮Activity并可拖动(访悬浮歌词) -
di1984HIT:
写的很好,我收藏一下。
java之动态代理模式(JDK和cglib) -
chinacssnj:
待测试,明天测,测试的结果发给大家
网络开发上传文件到服务器 -
fx_199182:
...
Android之MediaPlayer
SharedPreferences 的使用包括两方面:
1)利用 SharedPreferences 读取保存的配置;
2)利用 SharedPreferences 保存用户的配置。
一:有三种获取系统中保存的持久化数据的方式:
1) public SharedPreferences getPreferences (int mode)
通过 Activity 对象获取,获取的是本 Activity 私有的 Preference ,保存在系统中的 xml 形式的文件的名称为这个 Activity 的名字,因此一个 Activity 只能有一个,属于这个 Activity 。
getPreference源码:
public SharedPreferences getPreferences(int mode) { return getSharedPreferences(getLocalClassName(), mode); }
其实getPreferences (int mode)内部还是调用了getSharedPreferences(getLocalClassName(), mode)方法
2)因为 Activity 继承了 ContextWrapper ,因此也是通过 Activity 对象获取,但是属于整个应用程序,可以有多个,以第一参数的 name 为文件名保存在系统中。
public abstract SharedPreferences getSharedPreferences (String name, int mode) eg.sp = getSharedPreferences ("Alarming",0); SharedPreferences preferences; preferences = getSharedPreferences("fileName", MODE_PRIVATE);//fimename是数据库里的文件名,eg.(Alarming.ini)
MODE_PRIVATE:the default mode,only be accessed by the calling application. Constant Value: 0
MODE_WORLD_READABLE:allow all other applications to have read access to the created file.Constant Value: 1
MODE_WORLD_WRITEABLE: allow all other applications to have write access to the created file.Constant Value: 2
//如果modle值为空,则系统默认返回‘你好’。 preferences.getString("modle", "你好"); SharedPreferences.Editor editor = preferences.edit(); //保存组件中的值 editor.putString("modle", "value"); //提交保存的结果 editor.commit();
3) PreferenceManager 的静态函数,保存 PreferenceActivity 中的设置,属于整个应用程序,但是只有一个, Android 会根据包名和 PreferenceActivity 的布局文件来起一个名字保存
SharedPreferences mPerferences = PreferenceManager.getDefaultSharedPreferences(this); int counter = mPerferences.getInt("counter", 0); SharedPreferences.Editor mEditor = mPerferences.edit(); mEditor.putInt("counter", ++counter); mEditor.commit();
查看 Preferences 文件,首先打开命令终端 :adb shell 一下,然后 cd data/data 进入该目录, ls 一下我们会发现一大堆包文件,入下图所示 :
cd com.android.tutor ( 这里是我程序的包名 ) /shared_prefs,ls 一下会发现 .xml 文件如下图 :
打开 .xml 文件,格式如下 ( 为什么这样大家自己去理解 ):
view plaincopy to clipboardprint? <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <int name="counter" value="3" /> </map> <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <int name="counter" value="3" /> </map>
二、使用SharedPreferences存取数据
保存key-value对一般要指定一个文件名,然后用类似putString的方法指定key和value。SharedPreferences也采用了同样的方法。使用SharedPreferences保存key-value对的步骤如下:
(1) 使用Activity类的getSharedPreferences方法获得SharedPreferences对象。其中存储key-value的文件名的名称由getSharedPreferences方法的第一个参数指定。
(2) 使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。
(3) 通过SharedPreferences.Editor接口的putXXX方法保存key-value对。其中XXX表示value的不同数据类型。Boolean类型的value则是用putBoolean方法,字符串类型的则为putString方法。
(4) 通过SharedPreferences.Editor接口的commit方法保存key-value对。Commit方法相当于数据库事务中的提交 (commit)操作。只有在事件结束后进行提交,才会将数据真正保存在数据库中。保存key-value也是一样。
三:数据的存储位置和格式
SharedPreferences将数据文件写在手机内存私有的目录中。在模拟器中测试程序可以通过ADT的DDMS透视图来查看数据文件的位置。
具体的存入和获取操作:
1) 编辑strings.xml :
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, AndroidSharedPreferences!</string> <string name="app_name">Android 应用程序配置</string> <string name="tv_name">姓名</string> <string name="tv_age">年龄</string> <string name="bt_write">设置</string> <string name="bt_read">读取</string> <string name="save_success">保存成功</string> <string name="save_failed">保存失败</string> </resources>
2)编辑main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <!-- 姓名 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="70dip" android:layout_height="wrap_content" android:textSize="25dip" android:id="@+id/tv_name" android:text="@string/tv_name" /> <EditText android:layout_width="300dip" android:layout_height="wrap_content" android:layout_toRightOf="@id/tv_name" android:id="@+id/et_name" /> </RelativeLayout> <!-- 年龄 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:layout_width="70dip" android:layout_height="wrap_content" android:textSize="25dip" android:id="@+id/tv_age" android:text="@string/tv_age" /> <EditText android:layout_width="300dip" android:layout_height="wrap_content" android:layout_toRightOf="@id/tv_age" android:id="@+id/et_age" /> </RelativeLayout> <!-- 按钮 --> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="right"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bt_write" android:id="@+id/bt_set" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/bt_set" android:text="@string/bt_read" android:id="@+id/et_read" /> </RelativeLayout> </LinearLayout>
3)为按钮添加事件代码
package com.changcheng.sharedpreferences; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class AndroidSharedPreferences extends Activity { private static final String TAG = "AndroidSharedPreferences"; private EditText etName; private EditText etAge; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取按钮 Button btSet = (Button) this.findViewById(R.id.bt_set); Button btRead = (Button) this.findViewById(R.id.bt_read); // 获取编辑框 etName = (EditText) this.findViewById(R.id.et_name); etAge = (EditText) this.findViewById(R.id.et_age); // 添加事件 btSet.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 获取名称和年龄 String name = etName.getText().toString(); String age = etAge.getText().toString(); // 创建SharedPreferences SharedPreferences sp = getSharedPreferences("preferences", Context.MODE_PRIVATE); // 添加数据 Editor editor = sp.edit(); editor.putString("name", name); editor.putInt("age", Integer.parseInt(age)); // 保存数据 if (editor.commit()) Toast.makeText(AndroidSharedPreferences.this, R.string.save_success, 1).show(); else Toast.makeText(AndroidSharedPreferences.this, R.string.save_failed, 1).show(); } }); btRead.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // 创建SharedPreferences SharedPreferences sp = getSharedPreferences("preferences", Context.MODE_PRIVATE); // 获取数据 String name = sp.getString("name", "defName"); String age = sp.getInt("age", 0) + ""; // 显示数据 etName.setText(name); etAge.setText(age); } }); } }
4)运行程序
启动模拟器,运行程序。输入名称和年龄,点击保存。我们使用的代码是getSharedPreferences("preferences",Context.MODE_PRIVATE); ,当然commit 时。它会为我们为”/data/data/com.changcheng.sharedpreferences/shared_prefs/preferences.xml” 。将 preferences.xml 导出,查看它的内容为:
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> <map> <string name="name">长城</string> <int name="age" value="25" /> </map
将名称和年龄编辑框的内容清空,然后点击读取按钮,刚才写出的内容被读取进来。 SharedPreferences 的使用就是这么简单。
注:SharedPreferences不仅可以实现应用程序关闭在打开时恢复数据,还可以实现同一个应用程序内部两个Activity之间的数据传递(注意访问权限的设置)。当然不同应用程序间也可以访问他们通过SharedPreferences保存的XML文件,不过这样没有大多的应用价值。
四: 其他程序访问本程序的配置
通过SharedPreferences 创建的配置文件,不需要指定路径和文件后缀名,读取的时候也是。通常情况下,配置只是提供给本应用程序使用的。在这里我们介绍一个小知识点,即其他程序想使用本应用程序的配置,那应该如何使用SharedPreferences 呢?如下:
Context otherAppContext = createPackageContext("com.changcheng.sharedpreferences", Context.CONTEXT_IGNORE_SECURITY); SharedPreferences sharedPreferences = otherAppContext.getSharedPreferences("preferences", Context.MODE_WORLD_READABLE);
注意,为了使其他程序可以访问本应用程序的配置。那么在我们使用 getSharedPreferences 创建配置的时候必须为它的文件访问模式设置为允许其他程序读取或写入等。
发表评论
-
Android中AsyncTask的简单用法
2012-01-13 16:00 1126在开发Android移动客户端的时候往往要使用多线程来进行操 ... -
Android应用的自动升级、更新模块的实现 .
2011-11-16 14:01 646http://www.eoeandroid.com/threa ... -
一个APK反编译利器Apktool
2011-11-16 13:54 1556一个APK反编译利器Apktool APK 本地化 ... -
自定义Android标题栏TitleBar布局
2011-11-14 14:13 1216很多网友发现自己Android程序的标题栏TitleBar区域 ... -
Android GPS获取地理位置 .
2011-11-14 14:11 827import android.app.Activity; i ... -
android ListView详解
2011-11-14 13:48 1026在android开发中ListView是比较常用的组件,它以列 ... -
Android之Content provider 详解
2011-11-14 13:35 2437Android是如何实现应用程序之间数据共享的?一个应用程序可 ... -
Android源码地址
2011-11-12 19:14 1027http://blog.csdn.net/ilittleone ... -
android之File
2011-11-11 22:39 19701:Fileservice package cn.itcas ... -
Android知识补漏
2011-11-09 22:33 01:AndroidManifiest.xml < ... -
深入剖析Android消息机制
2011-11-09 14:13 935在Android中,线程内部或者线程之间进行信息交互时经常会使 ... -
Android之Handler详解(四)
2011-11-09 14:00 1263d、自己创建新的线程,然后在新线程中创建Looper,主线程调 ... -
Android之Handler详解(三)
2011-11-09 13:58 1349c、将消息队列绑定到子线程上,主线程只管通过Handl ... -
Android之Handler详解(二)
2011-11-09 13:54 1634二:sendMessage版本的Handl ... -
Android之Handler详解(一)
2011-11-09 13:22 2267一个Handler允许你发送和处理消息(Message)以及 ... -
关于StartActivityForResult方法的使用
2011-10-31 17:11 1055根据方法名可知 这个方法是要得到启动后的Activity返回的 ... -
Android 悬浮Activity并可拖动(访悬浮歌词)
2011-10-24 16:23 2051天天动听, 这款Android手机上的音乐播放器,相信不少朋友 ... -
Android GWES
2011-10-24 16:13 1158第八章 Android GWES 8.1 View Syst ... -
Android系统服务-WindowManager
2011-10-24 16:10 1416WindowManager是Android中一个重要的服务 ... -
http通信
2011-10-15 17:31 1068HTTP(HyperText Transfer Proto ...
相关推荐
使用SharedPreferences的小项目。
Android数据存储——SharedPreferences实现登入记住密码功能。
Android 3种数据保存(SharedPreferences存储 内部文件存储 数据库存储),如项目包有问题请联系我谢谢
Jetpack DataStore 是一种改进的新数据存储解决方案,允许使用协议缓冲区存储键值对或类型化对 象。 DataStore 以异步、一致的事务方式存储数据,克服了 SharedPreferences(以下统称为SP)的 一些缺点。 DataStore ...
Android项目开发中使用的数据存储方式有:网络存储、sqlite存储、File存储和SharedPreferences存储,四种存储方式对应的Demo别人是NetworkDemo、SqliteDemo、FileDemo和SharedPreferencesDemo,根据应用的场景选择...
前面呢,我们讲了文件的存储,文件的存储方式不适合保存一些比较复杂的文本数据。因此,我们来学习一下...SharedPreferences支持不同类型的数据存储,如果你存储的是整型,那你读取出来的也是整型,你存储的是浮点型,
Android 系统中主要提供了三种方式用于实现数据持久化功能,分别是: 1、文件存储 2、SharedPreference 存储 3、数据库存储。SharedPreferences 是使用键值对的方式来存储数据的,使用 SharedPreferences来进行数据...
程序代码 博文链接:https://prettyboy434.iteye.com/blog/724088
Android本地存储SharedPreferences详解 存储位置 SharedPreferences数据保存在: /data /data/<package> /shared_prefs 文件夹下,以XML格式保存,根元素为:。文件名称为获取SharedPreferences实例时传递的參数值。...
NULL 博文链接:https://zhujianjia.iteye.com/blog/1042048
嵌入式Android项目设计与开发 第六章 数据存储 ——SharedPreferences 2 SharedPreferences 键值对概念: 某一个数据都由一个键和一个值构成,键代表数据的名称,它是全局唯一的。具体的数据内容存放在值中。 键值对...
Android Studio编写的Android存储示例。其中包括:使用自带的SharedPreferences存取;存储数据到内存;存储数据到SD卡;存储数据到SQLite数据库。
利用数据存储的SharedPreferences开发技术,实现了一个简易的登录界面,可以记住登录密码等。
Android使用SharedPreferences进行数据存储,缓存ID等数据
1.掌握SharedPreferences的使用方法; 2.掌握各种文件存储的区别与适用情况; 3.了解SQLite数据库的特点和体系结构; 4.掌握SQLite数据库的建立和操作方法; 5.理解ContentProvider的用途和原理; 6.掌握...
利用数据存储的SharedPreferences开发技术,实现了一个简易的注册名片功能,可以实现名片的保存和读取等。
android 使用SharedPreferences对数据存储/删除/读取/文件删除
申明人(签名): 实验报告评语与评分: 评阅老师签名: 一、实验名称:Android数据存储与IO 二、实验日期:2014/11/13 三、实验目的: 1、掌握SharedPreferences的存储数据的格式及位置,能够读写其他应用程序的...
Android使用SharedPreferences和SQLite数据库实现数据存储