android基础---->SharedPreferences的使用

说明:

1. SharedPreferences是使用键值对的方式来存储数据的.

2. SharedPreferences保存的数据将持续整个用户会话,即使你的应用程序被杀掉(killed),直到应用程序卸载

3. SharedPreferences有三种模式:

  • Context.MODE_PRIVATE:别的应用不能访问得到SharedPreferences对象
  • Context.MODE_WORLD_READABLE:别的应用可以访问,并且是可以读取SharedPreferences中的数据,但不能写入数据
  • Context.MODE_WORLD_WRITEABLE:别的应用可以访问,可以在SharedPreferences中写入修改数据

4. Android提供了三种方式得到SharedPreferences 对象:本质上都是调用Context 类中的getSharedPreferences()方法:

  • Context类中的getSharedPreferences():两个参数,第一个指定生成文件的名称,第一个是操作模式。这样可以在一个Activity中创建多个SharedPreferences的文件
  • Activity类中的getPreferences():一个参数,操作模式。使用当前活动的类名作为文件的名称
  • PreferenceManager类中的getDefaultSharedPreferences():一个Context参数,使用当前应用程序的包名作为前缀来命名SharedPreferences文件。

使用:

1.  向SharedPreferences中写入数据,分为四步:

  • 通过上述说明,得到SharedPreferences对象
  • 调用SharedPreferences 对象的edit()方法来获取一个SharedPreferences.Editor 对象
  • 向SharedPreferences.Editor 对象中添加数据
  • 调用commit()方法将添加的数据提交,从而完成数据存储操作

2. 向SharedPreferences中读取数据,分为两步:

  • 通过上述说明,得到SharedPreferences对象
  • 调用SharedPreferences的getXXX()方法得到数据

结构:

代码:

AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.linux.sharedpreferencestest">
 4
 5     <application
 6         android:allowBackup="true"
 7         android:icon="@mipmap/ic_launcher"
 8         android:label="@string/app_name"
 9         android:supportsRtl="true"
10         android:theme="@style/AppTheme">
11         <activity android:name=".MainActivity">
12             <intent-filter>
13                 <action android:name="android.intent.action.MAIN" />
14
15                 <category android:name="android.intent.category.LAUNCHER" />
16             </intent-filter>
17         </activity>
18     </application>
19
20 </manifest>

MainActivity.java:

 1 package com.example.linux.sharedpreferencestest;
 2
 3 import android.content.Context;
 4 import android.content.SharedPreferences;
 5 import android.os.Bundle;
 6 import android.support.v7.app.AppCompatActivity;
 7 import android.view.View;
 8 import android.widget.TextView;
 9 import android.widget.Toast;
10
11 import java.util.HashSet;
12 import java.util.Set;
13
14 /**
15  * writer: 胡红翔
16  * date: 2016-03-10
17  * function: sharedPreference的简单使用
18  */
19 public class MainActivity extends AppCompatActivity {
20     private TextView textView;
21
22     @Override
23     protected void onCreate(Bundle savedInstanceState) {
24         super.onCreate(savedInstanceState);
25         setContentView(R.layout.activity_main);
26         textView = (TextView) findViewById(R.id.textView);
27     }
28
29     // 在share preference中写入数据
30     public void write(View view) {
31         //PreferenceManager.getDefaultSharedPreferences(this);
32         SharedPreferences preferences = this.getPreferences(Context.MODE_PRIVATE);
33         //SharedPreferences preferences = this.getSharedPreferences("Linux", Context.MODE_PRIVATE);
34         SharedPreferences.Editor editor = preferences.edit();
35
36         Set<String> stringSet = new HashSet<>();
37         stringSet.add("Huhx");
38         stringSet.add("Tomhu");
39         editor.putInt("int", 3);
40         editor.putString("name", "Linux");
41         editor.putStringSet("set", stringSet);
42
43         editor.commit();
44         Toast.makeText(MainActivity.this, "write to sharde preference success!", Toast.LENGTH_SHORT).show();
45     }
46
47     //在share preference中读取数据
48     public void read(View view) {
49         SharedPreferences preferences = this.getPreferences(Context.MODE_PRIVATE);
50         int intData = preferences.getInt("int", 0);
51         String name = preferences.getString("name", "无名");
52         Set<String> set = preferences.getStringSet("set", null);
53
54         StringBuffer stringBuffer = new StringBuffer();
55         stringBuffer.append("int: " + intData + "\n");
56         stringBuffer.append("name: " + name + "\n");
57         int length = set == null ? 0 : set.size();
58         stringBuffer.append("set size: " + length + "\n");
59
60         textView.setText(stringBuffer.toString());
61         Toast.makeText(MainActivity.this, "read from shared preference success!", Toast.LENGTH_SHORT).show();
62     }
63 }

activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="vertical"
 7     tools:context="com.example.linux.sharedpreferencestest.MainActivity">
 8
 9     <TextView
10         android:id="@+id/textView"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:text="Hello World!" />
14
15     <Button
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:onClick="write"
19         android:text="writeToShare" />
20
21     <Button
22         android:layout_width="wrap_content"
23         android:layout_height="wrap_content"
24         android:onClick="read"
25         android:text="readFromShare" />
26 </LinearLayout>

原理:

  • 数据的存储:

 1  public final class EditorImpl implements Editor {
 2         private final Map<String, Object> mModified = Maps.newHashMap();
 3         private boolean mClear = false;
 4
 5         public Editor putString(String key, @Nullable String value) {
 6             synchronized (this) {
 7                 mModified.put(key, value);
 8                 return this;
 9             }
10         }
11 }

  • 数据的读取:

1  @Nullable
2     public String getString(String key, @Nullable String defValue) {
3         synchronized (this) {
4             awaitLoadedLocked();
5             String v = (String)mMap.get(key);
6             return v != null ? v : defValue;
7         }
8     }

  • 数据文件:

1 SharedPreferencesImpl(File file, int mode) {
2         mFile = file;
3         mBackupFile = makeBackupFile(file); // 生成bak备份文件
4         mMode = mode;
5         mLoaded = false;
6         mMap = null;
7         startLoadFromDisk(); //命名文件,解析xml文件,并且将键值对存放到Map中
8     }

  • 文件位置:  /data/data/<package name>/shared_prefs/文件名.xml:

链接:

时间: 2024-08-09 02:08:29

android基础---->SharedPreferences的使用的相关文章

Android基础--键值对存储(SharedPreferences)

SharedPreferences用于将键值对形式的数据存储到当前应用专属的存储空间中 package com.itheima.sharedpreferences; import android.os.Bundle; import android.app.Activity; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.text.T

2015年最新Android基础入门教程目录(完结版)

2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全套教程 共148节已编写完毕,附上目录,关于教程的由来,笔者的情况和自学心得,资源分享 以及一些疑问等可戳:<2015最新Android基础入门教程>完结散花~ 下面是本系列教程的完整目录: 第一章:环境搭建与开发相关(已完结 10/10) Android基础入门教程--1.1 背景相关与系统架构

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

android中SharedPreferences和PreferenceActivity的存取数据

本文主要介绍SharedPreferences和PreferenceActivity的基础知识和用法. 主要资料来源于网络,包括但不限于: <Android之PreferenceActivity>--http://www.cnblogs.com/wservices/archive/2010/07/08/1773449.html <在Android中Preferences数据存储的使用> <Android的设置界面及Preference使用> <OnPreferen

2015年最新Android基础入门教程目录(临时版)

2015年最新Android基础入门教程目录(临时版) 标签(空格分隔): Android基础入门教程 前言: 嗯,昨晚又给人盗号了,博客上被发表了十几篇黄贴-然后目录给管理误删了,再发一次 后来协商后发现实被设密保问题了,建议各位用csdn的朋友密保自己设置一波~ 密保问题已修改回来了,应该不会再被盗号了-人怕出名猪怕壮哈~下次如果发现博客被封 告知下小猪,如何很急的话可以先到w3c鸟巢菜鸟教程上看Android基础入门教程 经过站长FK进行排版的,可能阅读体验会比csdn好很多!内容基本是同

Android基础新手教程——4.3.2 BroadcastReceiver庖丁解牛

Android基础新手教程--4.3.2 BroadcastReceiver庖丁解牛 标签(空格分隔): Android基础新手教程 本节引言: 上节我们对BroadcastReceiver已经有了一个初步的了解了,知道两种广播类型:标准与有序, 动态或静态注冊广播接收者,监听系统广播,自己发送广播.已经满足我们的基本需求了~ 可是前面写的广播都是全局广播! 这相同意味着我们APP发出的广播,其他APP都会接收到, 或者其他APP发送的广播,我们的APP也相同会接收到,这样easy引起一些安全性

android基础知识

1. 前言 1.1. 什么是3G.4G Ÿ 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. Ÿ 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求. Ÿ 目前主流的3G技术标准有三种: WCDMA:全球80%以上的3G网络都是采用此种制式.中国联通运营.186 CDMA2000:目前日韩及北美使用较多.中国电信运营. 189 TD-SCDMA

Android基础入门教程——4.3.2 BroadcastReceiver庖丁解牛

Android基础入门教程--4.3.2 BroadcastReceiver庖丁解牛 标签(空格分隔): Android基础入门教程 本节引言: 上节我们对BroadcastReceiver已经有了一个初步的了解了,知道两种广播类型:标准与有序, 动态或静态注册广播接收者,监听系统广播,自己发送广播!已经满足我们的基本需求了~ 但是前面写的广播都是全局广播!这同样意味着我们APP发出的广播,其他APP都会接收到, 或者其他APP发送的广播,我们的APP也同样会接收到,这样容易引起一些安全性的问题

Android基础-02

Android基础-02 1.单元测试的相关概念 测试分类: 1.根据是否知道源代码分类: 黑盒测试: 白盒测试: 2.根据测试的粒度: 方法测试:写完一个能够独立运行的方法后就去测试: 单元测试:写完一个能够运行的业务逻辑单元就去测试:JUnit单元测试: 模块测试:对模块做整体测试: 集成测试:对整个软件做集成测试:与服务器端做链条测试: Debug调试:使用debug调试程序: 3.根据测试的次数分类: 压力测试:LoadRunner.Jmeter: 冒烟测试:在同一时间内高频次的访问应用