数据存储

在Android中,数据存储一个用五种方式,分别是:文件存储 、SharedPreferences、SQLite数据库存储、ContentProvider、网络存储。

SharedPreferences

SharedPreferences是Android系统中最容易使用的存储技术,是一种轻量型的Android数据存储方案,主要用于保存应用程序一些配置信息,如登录用户信息、播放音乐退出时的状态、设置选项值等。

SharedPreferences的使用方法

1获取SaredPeferences对象

获取SharedPrreferences 对象有两种方式,既可以使用PreferenceManager.getDefaultSharePreferences()方法获取,又可使用Activity的getSharedPreferences(Stringname,int mode)方法获取,它的第一个参数是文件名称,第二个参数是访问模式。 gitiaisardeleres和gthtreterere )的区别在于:

(1)自定义的些设置通过文件名用geharedrefrenere0方法获取:

(2)应用默认的偏好文件peferces.xce通过gtDeaulsharedreferences)方法获取。

SharedPreferences 支持以下访问模式。

(1) MODE PRIVATE: 私有,默认值,代表该文件是私有数据,只能被应用程序本身访问,在该模式下,写入的内容会覆盖原文件的内容。

(2) MODE APPEND:该模式会检查文件是否存在,存在就向文件中追加内容,否则创建新文件。

(3) MODE WORLD READABLE:全局读,创建程序有读取或写入的权限,其他程序也有读取的权限,但不能写入。

(4) MODE WORLD WRITEABLE:全局写,创建程序和其他程序仅有写入的权限。

SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);  SharedPreferences perf= getSharedPreferences("myPref", Activity.MODE_PRIVATE);

使用SharedPreferences.edit()方法获取SharedPreferences.Editor内部接口,该接口提供了保存数据的方法,如putString(String key , String value)等。

Editor editor = pref.edit();

2.保存SharedPreferences数据

通过Editor对象的putXxx方法保存key-value,其中,Xxx标识了value的不同数据类型,例如,boolean类型的value需要用putBoolean方法,String类型的value要用putString方法,并通过Editor.commit方法才能真正保存到相应的文件中。

editor.putString("name","王艳");

editor。putInt("age",18);

editor.putBoolean("default",true);

editor.commit();

导出myPref.xml的文件内容如下。

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>

<map>

<string name = "name">王艳</string>

<boolean name = "default" value="true"/>

<int name="age" value="18"/>

</map>

3.读取SharedPreferences数据

String name=pref.getString("name",""); int age= pref.getInt("age",0);

使用SharedPreferences对象的getXxx方法可以从myPref.xml中获取数据,代码如下。

4.清除SharedPreferences数据

使用SharedPreferences对象的remove(key_name)方法删除特定值,如果需要删除所有的值,则应调用clear()。

editor.remove("name");  editor.remove("time");  editor.commit();

从SharedPreferences中删除所有数据的代码如下:

editor.clear();editor.commit();

在使用SharedPreferences的过程中需要注意以下几点。

(1).通过edit()获取一个新的编辑器对象进行写入,设置完成后必须调用commit()方法才能写入磁盘文件,否则重启应用后,数据就会丢失。

(2).必须使用局部变量保存获取到的edit()编辑器对象,而不能每项都通过edit()方法进行操作,因为每次调用edit方法都会生成新的对象实例,操作的将不是同一个对象。

(3).读取已存储的数据是通过SharedPreferences对象本身获取的, 而不再是editor对象。获取数据时必须指定默认值。

SQLite数据库存储

数据类型:integer 整型、real 浮点型、text 文本类型、blob 二进制类型

    public class MyDatabaseHelper extends SQLiteOpenHelper{

public static final String CREATE_BOOK = "create table book ( " 

        + " id integer primary key autoincrement,"       

        + " author text,"

        + "price real,"   

        + "pages integer,"   

        + "name text)";

private Context context;public MyDatabaseHelper (Context context, String name, CursorFactory factory, int version) {

super(context, name, factory, version); 

this.context = context;

@Override 

public void onCreate(SQLiteDatabase db) {     

     db.execSQL(CREATE_BOOK);     

    }    //当打开数据库时传入的版本号与当前的版本号不同时会调用该方法 

@Override

  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {   

}   

  }

在MainActivity中

MyDatabaseHelper helper = new MyDatabaseHelper(this,"BookStore.db",null,1); //检测到没有BookStore这个数据库,会创建该数据库并调用MyDatabaseHelper中的onCreated方法。 helper.getWritableDatabase();

向数据库添加数据

insert()方法,参数一表名,参数二是在未指定添加数据的情况下给某些可为空的列自动赋值为NULL,设置为null即可,参数三是ContentValues对象。

MainActivity

SQLiteDatabase db = helper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("name","The Book Name");

values.put("author","chen");

values.put("pages",100);

values.put("price",200);

db.insert("Book",null,values);

更新数据库中的数据

update()方法,参数一是表名,参数二是ContentValues对象,参数三、四是去约束更新某一行或某几行的数据,不指定默认更新所有。

MainActivity

SQLiteDatabase db = helper.getWritableDatabase();

ContentValues values = new ContentValues();

values.put("price",120);

db.update("Book",values,"name= ?",new String[]{"The Book Name"});

从数据库中删除数据

delete()方法,参数一是表名,参数二、三是去约束删除某一行或某几行的数据,不指定默认删除所有。

MainActivity

SQLiteDatabase db = helper.getWritableDatabase();

db.delete("Book","pages> ?",new String[]{"100"});

查询数据库中的数据

query()方法,参数一是表名,参数二是指定查询哪几列,默认全部,参数三、四是去约束查询某一行或某几行的数据,不指定默认查询所有,参数五是用于指定需要去group by的列,参数六是对group by的数据进一步的过滤,参数七是查询结果的排序方式

MainActivity

SQLiteDatabase db = helper.getWritableDatabase();

Cursor cursor = db.query("Book",null,null,null,null,null,null);

if(cursor.moveToFirst()){

  do{

        String name = cursor.getString(cursor.getColumnIndex("name");

        String author = cursor.getString(cursor.getColumnIndex("author");

        int pages = cursor.getString(cursor.getColumnIndex("pages");

        double price = cursor.getString(cursor.getColumnIndex("price");

  }while(cursor.moveToNext());

}

cursor.close():

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 一.菜单Menu 1.OptionsMenu 选项菜单 也叫系统菜单,右上角的三点 (1)高版本的菜单 ...
    chaohx阅读 999评论 0 7
  • 持久化技术:文件存储、SharedPreference存储和数据库存储。 一、文件存储 不对存储内容进行任何格式化...
    在你左右2018阅读 458评论 0 1
  • 持久化技术简介 数据持久化就是指将那些内存中的瞬时数据保存在存储设备中,保证即使在手机或电脑关机的情况下,这些数据...
    zda123000阅读 1,771评论 0 1
  • 你不是最好的 却是我最爱的 连你睡着了流口水的丑态 满脸的痘痘 乱晃的小肥肉 动辄赖在床上的 粉面油头 时常对我翻...
    微雨凭栏阅读 287评论 0 1
  • 昨天女儿喊喉咙疼,给她吃了药上学去了。半夜女儿说头疼的厉害,一看孩子发烧了。今天,请假没去上学。早上我还有点纠结想...
    我就是魔法师_a18d阅读 253评论 1 4