Android应用中使用SharedPreferences类存储数据的方法
作者:chenzheng_java 发布时间:2022-06-11 20:27:08
在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上.比如sharedpreferences可以将数据保存着应用软件的私有存储区,这些存储区的数据只能被写入这些数据的软件读取.当然Android还支持文件存储、SQLite数据库和Content Provider。在这里我们将对sharedpreferences存储方式进行介绍。
SharedPreferences是一种轻量级的数据存储方式,学过Web开发的同学,可以想象它是一个小小的Cookie。它可以用键值对的方式把简单数据类型(boolean、int、float、long和String)存储在应用程序的私有目录下(data/data/包名 /shared_prefs/)自己定义的xml文件中。
SharedPreferences是以键值对来存储应用程序的配置信息的一种方式,它只能存储基本数据类型。一个程序的配置文件仅可以在本应用程序中使用,或者说只能在同一个包内使用,不能在不同的包之间使用。实际上sharedPreferences是采用了XML格式将数据存储到设备中,在DDMS中的File Explorer中的/data/data//shares_prefs下。
在所有的Android SDK存储技术中SharedPreferences技术是最容易理解和使用的,因为SharedPreferences处理的就是一个key–value对。比如保存产品的名称,就可以将key设为produceName,value为实际的产品名。
一、获取SharedPreferences对象的方法
(1)通过函数Context.getSharedPreferences(String name,int mode),其中name为本组件的配置文件名(如果想要与本应用程序的其他组件共享此配置文件,可以用这个名字来检索到这个配置文件),mode为操作模式,默认的模式为0或MODE_PRIVATE;返回值为SharedPreferences。
(2)通过函数Activity.getPreferences(int mode),其中配置文件仅可以被调用的Activity使用。mode为操作模式,默认的模式为0或MODE_PRIVATE;返回值为SharedPreferences。
二、使用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透视图来查看数据文件的位置。
四、保存较为复杂的类型的数据
前面介绍的SharedPreferences只能保存简单类型的数据,例如,string,int等。如果需要存取比较复杂的数据类型比如类或者图像,则需要对这些数据进行编码,通常将其转换成Base64编码,然后将转换后的数据以字符串的形式保存在XML文件中。
五、设置数据文件的访问权限
因为Android系统并不是完全的创新的操作系统,而是在linux内核基础上发展起来的一个移动操作系统,所以android还有一些linux的基本特性。我们用getsharedPreferences方法获得sharedpreferences对象,getsharedPreferences方法的第2个参数值使用到了Activity.MODE_PRIVATE常量。除了这个常量以外还可以使用另外3个常量。这4个常量用于指定文件的建立模式。他们一个重要的功能就是设置文件的属性,从而可以设置数据文件的访问权限。
六、可以保存设置的Activity:PreferenceActivity
由于SharedPreferences可以很容易的保存key-value对,因此,通常使用SharedPreferences保存配置信息。不过Android SDK提供了更为容易的方法来设计配置界面,并且可以透明地保存配置信息。这就是PreferenceActivity。
PreferenceActivity是Activity的子类,该类封装了SharedPreferences。因此,PreferenceActivity的所有子类都拥有保存key-value对的能力。
PreferenceActivity提供了一些常用的设置项,这些设置项可以满足大多数的配置界面的要求。与组件一样,这些配置项既可以从XML文件创建,也可以从代码创建。比较常用的有:
CheckboxPreference:对应标签。该设置项会创建一个CheckBox组件。
EditTextPreference:对应标签。单击该设置项会弹出一个带EditText组件的对话框。
ListPreference:对应标签。单击该设置项会弹出带ListView组件的对话框。
示例
先上图:
然后是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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
/>
</LinearLayout>
activity的代码:
package cn.com.sharedPreferencesTest;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class SharedPreferencesActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
saveSharedPreferences();
readSharedPreferences();
}
/**
* @description 创建并保存一些设置信息
*/
private void saveSharedPreferences(){
/*
* getSharedPreferences(String name,int mode)方法是在Context中定义的抽象方法,在ContextWrapper中进行了具体实现,
* 该方法会根据用户传递的名称和写入类型创建一个SharedPreferences对象进行返回。
* 在Activity中,还有一个方法可以回去SharedPreferences对象,这个方法就是SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
* 改方法在Activity中定义并实现,这里没有name参数是因为该方法默认将当前Activity的类名作为name属性(这里的类名并不包含包路径哦)
* */
SharedPreferences sharedPreferences = getSharedPreferences("preferences", MODE_PRIVATE);
//存储数据
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("name", "蔡依林");
editor.putInt("age", 31);
Boolean b = editor.commit();
if(b){
Log.i("通知:", "保存成功!");
}else{
Log.i("通知", "保存失败!");
}
}
/**
* @author chenzheng_java
* @description 读取我们添加到SharedPreference对象中的数据
* @since 2011/03/05
*/
private void readSharedPreferences(){
String result = "美女信息:/n" ;
SharedPreferences sharedPreferences = this.getSharedPreferences("preferences", MODE_PRIVATE);
result+=" 姓名 "+sharedPreferences.getString("name", "暂时没有人");
result+=" 年龄"+sharedPreferences.getInt("age", -1);
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(result);
}
}
其他的都为默认。
猜你喜欢
- 通过http://localhost:7002/card/services/HelloWorld?wsdl访问到xml如下,说明接口写对了。
- 选取单个元素直觉来说选取单个元素肯定会比选取多个要简单得多,不过这里也存在一些问题。我们先看下一般的做法的问题是什么,然后再看下如何用lam
- 面试题:1.如何保证多线程下 i++ 结果正确?2.一个线程如果出现了运行时异常会怎么样?3.一个线程运行时发生异常会怎样?为了避免临界区的
- JavaFX主要致力于富客户端开发,以弥补swing的缺陷,主要提供图形库与media库,支持audio,video,graphic,ani
- 本文实例为大家分享了C#简单爬虫案例,供大家参考,具体内容如下using System;using System.Collections.G
- 一、ArrayList简介在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList底层是一段连
- 最近一个项目中,需要用到Java的websocket新特性,于是就学了一下,感觉这技术还挺好玩的,瞬间知道网页上面的那些在线客服是怎么做的了
- 介绍原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式是一种对象创建
- public/protected/privatepublic表示公开,private表示私有,protected表示保护,什么都不写表示默认
- 断言的概念断言用于证明和测试程序的假设,比如“这里的值大于 5”。断言可以在运行时从代码中完全删除,所以对代码的运行速度没有影响。断言的使用
- 前言在我们日常的开发中,很多时候,定时任务都不是写死的,而是写到数据库中,从而实现定时任务的动态配置,下面就通过一个简单的示例,来实现这个功
- 前言:其实作为一名Java的程序猿,无论你是初学也好,大神也罢,学生管理系统一直都是一个非常好的例子,初学者主要是用数组、List等等来写出
- 在多线程对一个整数进行自增操作时,需要用synchronized进行同步。然而,如果synchronized的对象选取的不合适的话,就无法实
- 一、JVM 类加载机制JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。1. 加载:加载是类
- dll的编写,首先是打开VS新建一个C++的控制台程序,下一步后选择dll以及空文档即可。然后就是添加一个类添加一个方法。方法排头固定格式
- 一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现
- package com.cq2022.zago.base.util;import java.io.FileReader;import jav
- 这是一个及其常见的问题,网上已经有关于这个问题的很多讨论。但是我觉得都是不求甚解,有一些还是在误导别人。下面我来说下我对这三者的理解,如有错
- 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLock等等 ) 。这些
- 最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用J