Android:日常学习笔记(9)———探究持久化技术

引入持久化技术

什么是持久化技术

  持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。

Android系统提供的三种持久化技术:

  文件存储、SharedPreference(使用共享首选项)存储以及数据库存储。

文件存储

说明:

  您可以直接在设备的内部存储中保存文件。默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。

要创建私有文件并写入到内部存储:

  1. 使用文件名称和操作模式调用 openFileOutput()。 这将返回一个 FileOutputStream
  2. 使用 write() 写入到文件。
  3. 使用 close() 关闭流式传输。

要从内部存储读取文件:

  1. 调用 openFileInput() 并向其传递要读取的文件名称。 这将返回一个 FileInputStream
  2. 使用 read() 读取文件字节。
  3. 然后使用 close() 关闭流式传输。

通用代码

 public void save1(String text)
{
FileOutputStream out = null;
BufferedWriter writer = null;
try {
out = openFileOutput("data",MODE_PRIVATE);
writer = new BufferedWriter(new OutputStreamWriter(out));
writer.write(text);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(writer!=null)
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void read1()
{
FileInputStream in =null;
BufferedReader reader = null;
StringBuilder content = new StringBuilder(); try {
in = openFileInput("data");
reader = new BufferedReader(new InputStreamReader(in));
String line =null;
while ((line=reader.readLine())!=null)
content.append(line);
Toast.makeText(StoreActivity.this,content,Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

SharedPreference存储

说明:

  不同于文件的存储方式,ShardPreference是使用键值对的方式来存储数据的。您可以使用 SharedPreferences 来保存任何原始数据:布尔值、浮点值、整型值、长整型和字符串。 此数据将跨多个用户会话永久保留(即使您的应用已终止亦如此)。

获取SharedPreferences对象:

  • getSharedPreferences() - 如果您需要多个按名称(使用第一个参数指定)识别的首选项文件,请使用此方法。
  • getPreferences() - 如果您只需要一个用于 Activity 的首选项文件,请使用此方法。 由于这将是用于 Activity 的唯一首选项文件,因此无需提供名称。也就是说会把当前活动的类名作为文件名。

写入值:

  1. 调用 edit() 以获取 SharedPreferences.Editor
  2. 使用 putBoolean() 和 putString() 等方法添加值。
  3. 使用 commit() 提交新值

读入值:

  要读取值,请使用 getBoolean() 和 getString() 等 SharedPreferences 方法。

通用代码

    public void save2()
{
SharedPreferences.Editor editor = getSharedPreferences("data",MODE_PRIVATE).edit();
editor.putString("name","Tom");
editor.putInt("age",20);
editor.apply();
} public void read2()
{
SharedPreferences sharedPreferences = getSharedPreferences("data",MODE_PRIVATE);
Log.d("StoreActivity",sharedPreferences.getString("name",""));
Log.d("StoreActivity",""+sharedPreferences.getInt("age",100)); }

SQLite数据库存储

创建数据库 

说明:

  Android为了让我们更加方便地管理数据库,专门提供了一个SQLiteOPenHelper来帮助我们对数据库进行创建和升级。

但是SQLiteOPenHelper是一个抽象类,这意味者我们需要创建一个自己的帮助类去继承它。但是需要去实现创建和更新的两个方法,即  onCreate(SQLiteDatabase db)与onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。

然后调用getReadableDataBase()或getWriteableDataBase()方法创建数据库。

Public constructors

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version)

Create a helper object to create, open, and/or manage a database.

SQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandlererrorHandler)

Create a helper object to create, open, and/or manage a database.

Public methods

void close()

关闭任何打开的数据库对象。

String getDatabaseName()

Return the name of the SQLite database being opened, as given to the constructor.

SQLiteDatabase getReadableDatabase()

Create and/or open a database.

SQLiteDatabase getWritableDatabase()

Create and/or open a database that will be used for reading and writing.

void onConfigure(SQLiteDatabase db)

Called when the database connection is being configured, to enable features such as write-ahead logging or foreign key support.

abstract void onCreate(SQLiteDatabase db)

Called when the database is created for the first time.

void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion)

Called when the database needs to be downgraded.

void onOpen(SQLiteDatabase db)

Called when the database has been opened.

abstract void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

Called when the database needs to be upgraded.

void setWriteAheadLoggingEnabled(boolean enabled)

Enables or disables the use of write-ahead logging for the database.

public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK="CREATE TABLE Book(\n" + //再创建时会用到的SQL语句
" id INTEGER PRIMARY KEY AUTOINCREMENT,\n" +
" author TEXT,\n" +
" price REAL,\n" +
" pages INTEGER,\n" +
" name TEXT)";
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} @Override
public void onCreate(SQLiteDatabase db) { //重写创建方法
db.execSQL(CREATE_BOOK); //执行创建数据库的语句
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //重写更新方法
db.execSQL("drop table if exists Book");
onCreate(db);
}
}

创建并打开或打开数据库:

说明:SQLiteHelper对于一个数据库来说只能调用一次onCreate方法,即再创建时调用一次。若它存在,则永远不会再调用了。

 更新数据表:

1.重写更新方法:

2.传入更大的版本号,从而调用更新方法:

SQLite的增删改查操作

添加数据

Android:日常学习笔记(9)———探究持久化技术的更多相关文章

  1. Android:日常学习笔记(9)———探究广播机制

    Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...

  2. Android:日常学习笔记(8)———探究UI开发(5)

    Android:日常学习笔记(8)———探究UI开发(5) ListView控件的使用 ListView概述 A view that shows items in a vertically scrol ...

  3. Android:日常学习笔记(7)———探究UI开发(4)

    Android:日常学习笔记(7)———探究UI开发(4) UI概述  View 和 ViewGrou Android 应用中的所有用户界面元素都是使用 View 和 ViewGroup 对象构建而成 ...

  4. Android:日常学习笔记(8)———探究UI开发(3)

    Android:日常学习笔记(8)———探究UI开发(3) 详解四种基本布局 前言 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 ...

  5. Android:日常学习笔记(8)———探究UI开发(2)

    Android:日常学习笔记(8)———探究UI开发(2) 对话框 说明: 对话框是提示用户作出决定或输入额外信息的小窗口. 对话框不会填充屏幕,通常用于需要用户采取行动才能继续执行的模式事件. 提示 ...

  6. Android:日常学习笔记(7)———探究UI开发(1)

    Android:日常学习笔记(7)———探究UI开发(1) 常用控件的使用方法 TextView 说明:TextView是安卓中最为简单的一个控件,常用来在界面上显示一段文本信息. 代码: <T ...

  7. Android:日常学习笔记(6)——探究活动(4)

    Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...

  8. Android:日常学习笔记(6)——探究活动(3)

    Android:日常学习笔记(6)——探究活动(3) 活动的生命周期 返回栈 Android中的活动是可以叠加的,我们每启动一个新活动,就会覆盖在原来的活动上,点击Back以后销毁最上面的活动,下面的 ...

  9. Android:日常学习笔记(5)——探究活动(2)

    Android:日常学习笔记(5)——探究活动(2) 使用Intent在活动之间穿梭 什么是Intent Intent时Android程序中各组件之间进行交互的一种重要方式,他不仅可以指明当前组件想要 ...

随机推荐

  1. linux挂载远程windows服务器上的ISO,给内网的服务器安装软件

    原文: http://blog.csdn.net/chagaostu/article/details/45195817 给内网的服务器安装软件 直接用yum install XXX的话,会告知找不到源 ...

  2. deepin linux下eclipse c/c++ 调试开源代码

    1.deepin linux 下使用eclipse c/c++ 调试2. 编译选项,-g3 -O0,-g3表示输出调试信息,-O0不优化代码(第一个字母o的大写,第二个是数字0) 3.必备环境: gd ...

  3. iOS开发之Auto Layout入门(转)

    随着iPhone6与iOS8的临近,适配的问题讲更加复杂,最近学习了一下Auto Layout的使用,与大家分享. 什么是Auto Layout? Auto Layout是iOS6发布后引入的一个全新 ...

  4. 微信错误提示code= -4/微信发送被拒绝

    微信错误提示code= -4/微信发送被拒绝 在做第三方登录时.出现微信授权返回的错误码为:code= -4,原因是由于: (微信开放平台的签名填错了微信平台注冊的签名应该是:使用微信签名工具安卓到手 ...

  5. Swoole系列(二):安装

    Window是没办法安装的,服务器版本建议用linux的centos7 Php版本5.4 安装步骤: 1.更新你的yum yum update 2.安装php相关扩展 2.yum install ph ...

  6. Discuz二次开发手册

    Discuz文件说明,有助于discuz爱好者,进行自己的开发,在这里提供方便 admincp.php——后台系统设置主程序文件,一般只处理菜单的显示的访问权限,不处理管理控制. ajax.php—— ...

  7. 我的第四个程序 java实现加减乘除

    import java.util.Scanner; public class Test { public static void main(String [] args) { Scanner sc = ...

  8. 【翻译自mos文章】当点击完 finishbutton后,dbca 或者dbua hang住

    当点击完 finishbutton后,dbca 或者dbua hang住 来源于: DBCA/DBUA APPEARS TO HANG AFTER CLICKING FINISH BUTTON (文档 ...

  9. C#调用python脚本

    因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘. 只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对 ...

  10. POJ1365 Prime Land【质因数分解】【素数】【水题】

    题目链接: http://poj.org/problem?id=1365 题目大意: 告诉你一个数的质因数x的全部底数pi和幂ei.输出x-1的质因数的全部底数和幂 解题思路: 这道题不难.可是题意特 ...