android数据存储之sharedPreference

  Android的数据存储共分为5种

    ①SharedPreferences  (当前应用的路径下)

    ②内部存储       (当前应用的路径下)

    ③外部存储        -sdCard

    ④Sqlite          Android自带的一个轻量级数据库

    ⑤网络存储        连接到服务器 ----将数据上传到服务器

  其实归根结底,为一种,都以文件形式保存的!先说第一种如何用SharedPreferences保存数据

  sharedPreferences用于保存简单的数据类型  (ps:没人会不知道,就不写了)

  存储的步骤:

1 SharedPreferences.Editor edit = sharedPreferences.edit();
2             edit.putString("name", et_text.getText().toString());
3             edit.commit();

  读取的步骤:

1 SharedPreferences sf = getSharedPreferences("SamSarah", MODE_PRIVATE);
2         // getString(String key, String defValue) 设置默认值为null
3         tv_showValue.setText(sf.getString("name", null));

  关键代码如上

  注意:使用了Editor之后,一定要commit(),为什么?如果不commit()的话,写入的数据无效,也就不会将此次变化写入内存,硬盘。

  下面贴一个简单的demo

  activity_main.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     tools:context=".MainActivity" >
 6
 7     <EditText
 8         android:id="@+id/et_text"
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:layout_alignParentLeft="true"
12         android:layout_alignParentTop="true"
13         android:ems="10" >
14
15         <requestFocus />
16     </EditText>
17
18     <Button
19         android:id="@+id/btn_save"
20         android:layout_width="fill_parent"
21         android:layout_height="wrap_content"
22         android:layout_alignParentLeft="true"
23         android:layout_below="@+id/et_text"
24         android:text="保存数据" />
25
26     <Button
27         android:id="@+id/btn_delete"
28         android:layout_width="fill_parent"
29         android:layout_height="wrap_content"
30         android:layout_alignParentLeft="true"
31         android:layout_below="@+id/btn_save"
32         android:text="删除数据" />
33
34     <Button
35         android:id="@+id/btn_jump"
36         android:layout_width="fill_parent"
37         android:layout_height="wrap_content"
38         android:layout_alignParentLeft="true"
39         android:layout_below="@+id/btn_delete"
40         android:text="跳转" />
41
42 </RelativeLayout>

  activity_showvalue.xml

 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent" >
 5
 6     <TextView
 7         android:id="@+id/tv_showValue"
 8         android:layout_width="wrap_content"
 9         android:layout_height="wrap_content"
10         android:text="@string/hello_world" />
11
12 </RelativeLayout>

  MainActivity.java

 1 public class MainActivity extends Activity implements OnClickListener {
 2
 3     private EditText et_text;
 4     private Button btn_save;
 5     private Button btn_delete;
 6     private Button btn_jump;
 7     private SharedPreferences sharedPreferences;
 8
 9     @Override
10     protected void onCreate(Bundle savedInstanceState) {
11         super.onCreate(savedInstanceState);
12         initView();
13     }
14
15     private void initView() {
16         requestWindowFeature(Window.FEATURE_NO_TITLE);
17         setContentView(R.layout.activity_main);
18         // sharedPreferences保存简单的数据类型,(key,value)
19         sharedPreferences = this.getSharedPreferences("SamSarah", MODE_PRIVATE);
20         et_text = (EditText) findViewById(R.id.et_text);
21         btn_save = (Button) findViewById(R.id.btn_save);
22         btn_delete = (Button) findViewById(R.id.btn_delete);
23         btn_jump = (Button) findViewById(R.id.btn_jump);
24         btn_save.setOnClickListener(this);
25         btn_delete.setOnClickListener(this);
26         btn_jump.setOnClickListener(this);
27
28     }
29
30     @Override
31     public void onClick(View v) {
32         switch (v.getId()) {
33         case R.id.btn_save:
34             SharedPreferences.Editor edit = sharedPreferences.edit();
35             edit.putString("name", et_text.getText().toString());
36             edit.commit();
37             Toast.makeText(this, "数据保存成功", Toast.LENGTH_SHORT).show();
38             break;
39         case R.id.btn_delete:
40             SharedPreferences.Editor editD = sharedPreferences.edit();
41             editD.remove("name");
42             editD.commit();
43             Toast.makeText(this, "数据删除成功", Toast.LENGTH_SHORT).show();
44
45             break;
46         case R.id.btn_jump:
47             Intent intent = new Intent(MainActivity.this, showData.class);
48             startActivity(intent);
49             break;
50
51         default:
52             break;
53         }
54     }
55 }

  showData.java

 1 public class showData extends Activity {
 2     private TextView tv_showValue;
 3
 4     @Override
 5     protected void onCreate(Bundle savedInstanceState) {
 6         super.onCreate(savedInstanceState);
 7         initView();
 8
 9     }
10
11     private void initView() {
12         requestWindowFeature(Window.FEATURE_NO_TITLE);
13         setContentView(R.layout.activity_showvalue);
14         tv_showValue = (TextView) findViewById(R.id.tv_showValue);
15         SharedPreferences sf = getSharedPreferences("SamSarah", MODE_PRIVATE);
16         // getString(String key, String defValue) 设置默认值为null
17         tv_showValue.setText(sf.getString("name", null));
18
19     }
20 }

  

  但是事情远没有结束,我们要善于给自己问问题,那么为什么要用sharedPreferences的时候要拿到Editor呢?而且这一步骤刚开始很容易被忘记,好奇之下,看看源码,一切迎刃而解

  

  

  源码中可以看到接口SharedPreferences里面又定义了接口Editor这个抽象类,而抽象方法则都是在Editor里面,官方对Editor的说明是这样:Editor接口用于修改值的对象。你使editor发生了一定量数据的变化,且不是复制回原来的sharedPreferences的数据,直到你调用了commit()或者apply()。不管怎么样都记住那个抽象方法是在Editor这个抽象类中,就不会出错了。

  还有一个问题,为什么数据写完之后必须要调用commit()呢?而官方文档说或者是apply()呢?它们两个的区别又在哪里呢?

 

    首先代码块仍旧在Editor里面 ,没有指定访问权限,默认的就是public,但是返回值commit()方法是boolean,apply()方法是void,好像明白了点什么,那就继续往下:

    ①既然返回值不同,又都可以提交修改数据,就暗含commit提交成功的时候会返回true,失败的时候会返回false;而apply并不会

    ②官方说明,apply是先将数据原子写入内存,后异步写入硬盘。而commit是同步提交到硬件资源中。因此在多个并发的提交commit的时候,它们会等待处理当前的commit保存到磁盘后再进行操作,从而降低了效率。而apply只是原子的提交内容,后面又调用apply的函数将会直接覆盖前面的内存数据,从效率上来讲比commit好很多。

    在一个进程中Sharedpreferences是单实例,一般不会出现并发冲突,如果对提交结果不关心,建议使用apply;如果关心提交结果,则使用commit。

    代码托管:

时间: 2024-10-31 00:24:17

android数据存储之sharedPreference的相关文章

android数据存储_SharedPreferences

源码下载(免下载积分):下载 对于相对较少键值对的数据集合可以使用SharedPreferences来进行存储, 键值对的数据类型基本上是基本数据类型, 常见的操作: 创建新的shared preference文件或者访问已经存在的shared preference, 可以使用getSharedPreferences()或者getPreferences() getSharedPreferences() 对于使用多个sharedpreference文件,你可以使用 这个函数,并可以通过第一个参数来

Android数据存储之SharedPreferences浅析

SharedPreferences 是 Android 数据存储方式中的一种,特别适合用来存储少量的.格式简单的数据,比如应用程序的各种配置信息,如是否打开音效,是否开启震动等等. SharedPreferences 存储数据的位置和格式 SharedPreferences 将数据以键值对的形式,存储在 /data/data/<package name>/shared_prefs 目录下面,以 XML 的格式保存,该 XML 文件的根元素是 <map.../>,该元素里每个子元素代

android 数据存储的几种方式

总体的来讲,数据存储方式有三种:一个是文件,一个是数据库,另一个则是网络.其中文件和数据库可能用的稍多一些,文件用起来较为方便,程序可以自己定义格式:数据库用起稍烦锁一些,但它有它的优点,比如在海量数据时性能优越,有查询功能,可以加密,可以加锁,可以跨应用,跨平台等等:网络,则用于比较重要的事情,比如科研,勘探,航空等实时采集到的数据需要马上通过网络传输到数据处理中心进行存储并进行处理. 对于Android平台来讲,它的存储方式也不外乎这几种,按方式总体来分,也是文件,数据库和网络.但从开发者的

10、Android数据存储

课程目标: 掌握Android中数据存储的几种方式 熟练使用PreferenceActivity&PreferenceScreen做专业的Setting功能 熟练使用SQLite3来存储数据 深入研究SQLite3数据库特性,并且比对与大型数据库的包括存储过程,主外键关联等特性 了解文件存储的内外存储分别  了解网络存储C/S结构原理 . 重点难点:SQLiteOpenHelper类的使用   SQLIte数据库的特性掌握 考核目标: 说出Android数据存储的几种形式 ? Sqlite3能支

Android——数据存储(四种方式之一)SharedPrefereces

Android--数据存储(四种方式) 1.SharedPrefereces   轻量级.XML  存储文件名,数据保存在data/data/basepackage/shared_prefs/myopt.xml中   实例-收藏-记住密码自动登录 //一种轻量级的数据存储方式//通过KEY 存入数据--putxxxx(key,value) 取出数据--getxxxx(key  default)   2.读写SD卡  SD的根目录  适用于数据流读写 3.SQLite  轻量级.dp文件多用于手机

Android数据存储(2):Internal Storage

Android数据存储的第二种形式是Internal Storage,即内部存储. 内存存储的特点是存储的是私有数据,其存储位置是在手机内存,一种是普通的文件存储,另一种是文本或图片在内存的缓存. 内部缓存的存放位置/data/data/包名/files 或 /data/data/包名/cache 1.create and write a private file to the internal storage: 步骤: 1)调用 openFileOutput()方法,返回的是一个FileOut

【Android数据存储】- File

个人学习整理,如有不足之处,请不吝指教.转载请注明:@CSU-Max 读写本应用程序数据文件夹中的文件 此种方法读写的文件在/data/data/<应用程序包名>中 android 中提供了 openFileInput(String fileName) 和 openFileOutput(String fileName, int mode) 两个方法来读取本应用程序数据文件夹中的文件和向其写入. openFileInput(String fileName)    打开文件输入流 openFile

Android 数据存储方式分为哪几种?

10道题值得思考 第一道题 1.Android 数据存储方式分为哪几种? SharedPreferences存储数据 2. CotentProvider内容提供者 3. 文件存储 4. 数据库存储(Sqlite) 5.网络存储 2. NDK是什么? 1. 一系列工具类的集合 2. Arm指令集 3. NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk.这些工具对开发者的帮助是巨大的. NDK集成了交叉编译器,并提供了相应的mk文件隔离

Android数据存储技术五大方式总结

本文介绍Android平台进行数据存储的五大方式,分别如下: 1 使用SharedPreferences存储数据 2 文件存储数据 3 SQLite数据库存储数据 4 使用ContentProvider存储数据 5 网络存储数据 下面详细讲解这五种方式的特点 第一种: 使用SharedPreferences存储数据     适用范围:保存少量的数据,且这些数据的格式非常简单:字符串型.基本类型的值.比如应用程序的各种配置信息(如是否打开音效.是否使用震动效果.小游戏的玩家积分等),解锁口令密码等