Android:日常学习笔记(9)———探究持久化技术
2017-05-24 17:41
561 查看
Android:日常学习笔记(9)———探究持久化技术
引入持久化技术
什么是持久化技术
持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失。Android系统提供的三种持久化技术:
文件存储、SharedPreference(使用共享首选项)存储以及数据库存储。
文件存储
说明:
您可以直接在设备的内部存储中保存文件。默认情况下,保存到内部存储的文件是应用的私有文件,其他应用(和用户)不能访问这些文件。 当用户卸载您的应用时,这些文件也会被移除。
要创建私有文件并写入到内部存储:
使用文件名称和操作模式调用
openFileOutput()。 这将返回一个
FileOutputStream。
使用
)]write()写入到文件。
使用
close()关闭流式传输。
要从内部存储读取文件:
调用
openFileInput()并向其传递要读取的文件名称。 这将返回一个
FileInputStream。
使用
,%20int,%20int)]read()读取文件字节。
然后使用
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 的唯一首选项文件,因此无需提供名称。也就是说会把当前活动的类名作为文件名。
写入值:
调用
edit()以获取
SharedPreferences.Editor。
使用
putBoolean()和
putString()等方法添加值。
使用
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数据库存储
[b]创建数据库 [/b]说明:
Android为了让我们更加方便地管理数据库,专门提供了一个SQLiteOPenHelper来帮助我们对数据库进行创建和升级。
但是SQLiteOPenHelper是一个抽象类,这意味者我们需要创建一个自己的帮助类去继承它。但是需要去实现创建和更新的两个方法,即
onCreate(SQLiteDatabase db)与[b][/b]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:日常学习笔记(8)———探究UI开发(2)
- Android:日常学习笔记(5)——探究活动(2)
- Android:日常学习笔记(7)———探究UI开发(1)
- Android:日常学习笔记(4)——探究活动(1)
- Android:日常学习笔记(6)——探究活动(4)
- Android:日常学习笔记(8)———探究UI开发(3)
- Android:日常学习笔记(8)———探究UI开发(5)
- Android:日常学习笔记(7)———探究UI开发(4)
- Android:日常学习笔记(9)———探究广播机制
- Android:日常学习笔记(6)——探究活动(3)
- River的Android的学习笔记——数据持久化技术(文件存储)
- 学习笔记之什么是持久化和对象关系映射ORM技术
- android 学习笔记之开源开发技术和框架
- 【转】Android 学习笔记——利用JNI技术在Android中调用、调试C++代码
- Android 学习笔记多媒体技术之 AsyncTask+实现音频播放...
- Android第一行代码学习笔记八----网络技术
- Android笔记(二十七)数据持久化技术
- Androidc学习笔记四之数据库持久化操作
- Android 学习笔记多媒体技术之 Drawable类+Tween(补间动画)+Frame(帧动画)
- Android 学习笔记——利用JNI技术在Android中调用、调试C++代码