安卓数据存储详解孙霞霞著.docx
- 文档编号:30337537
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:11
- 大小:19.75KB
安卓数据存储详解孙霞霞著.docx
《安卓数据存储详解孙霞霞著.docx》由会员分享,可在线阅读,更多相关《安卓数据存储详解孙霞霞著.docx(11页珍藏版)》请在冰豆网上搜索。
安卓数据存储详解孙霞霞著
【sharePreferences】共享参数:
概念:
SharedPreferences是Android系统提供的一个通用的数据持久化框架,用于存储和读取key-value类型的原始基本数据类型对,目前支持String、int、long、float、boolean等基本类型的存储,对于自定义的对象数据类型,无法使用SharedPreferences来存储。
他通常以xml文件方式存储在data文件夹中,文件存储路径:
/data/data/{appPackageName}/shared_prefs/{filename}
SharedPreferences主要用于存储系统的配置信息。
例如上次登录的用户名,上次最后设置的配置信息(如:
是否打开音效、是否使用振动,小游戏的玩家积分等)。
当再次启动程序后依然保持原有设置。
SharedPreferences用键值对方式存储,方便写入和读取。
注:
SharePreferenced本身的对象不能对数据进行存储和修改,只能获取到数据,是通过Editor的实例化对象对数据进行存储和修改。
常用方法
1.Context.getSharedPreferences(String,intmode)
mode的属性值有:
Context.MODE_PRIVATE:
指定该SharedPreferences的数据只能被本应用程序读、写
Context.MODE_APPEND:
新内容追加到原内容后
Context.MODE_WORLD_READABLE:
指定SharedPreferences数据能被其他应用程序读,但是不支持写
Context.MODE_WORLD_WRITEABLE:
指定SharedPreferences数据能被其他应用程序读、写会覆盖原数据;
可以使用"+"连接这些权限
2.contains(Stringkey)
3.Map >getAll() 4.getString(Stringkey,StringdefValue) 5.SharedPreferences.Editoredit() putString(Stringkey,Stringvalue) putStringSet(Stringkey,Set putBoolean(Stringkey,booleanvalue) clear() commit()编辑完数据之后必须提交 SharePreferenced存储数据的方法 1.创建一个SharePreferenced的对象: SharedPreferencespref=getSharedPreferences("name_pref",MODE_PRIVATE); 2.创建一个Editor的对象: editor=pref.edit(); 3.然后调用Editor对象的putXxx方法,把指定的key值和他相对应的数据存储到SharePreferenced当中。 4.调用Editor的commit()方法,把存储的数据内容或者修改的内容提交。 : mit(); 登录的实例: (重重点) protectedvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); userEt=(EditText)findViewById(R.id.userEt); passEt=(EditText)findViewById(R.id.passEt); chkSave=(CheckBox)findViewById(R.id.chkSaveUser); pref=getSharedPreferences("name_pref",MODE_PRIVATE); editor=pref.edit(); Stringname=pref.getString("name",null);//获取数据 if(name==null){ chkSave.setChecked(false); }else{ userEt.setText(name); chkSave.setChecked(true); } } publicvoidloginClick(Viewv){ Stringname=userEt.getText().toString(); Stringpass=passEt.getText().toString(); if("admin".equals(name)&&"123456".equals(pass)){ if(chkSave.isChecked()){ editor.putString("name",name); mit(); }else{ editor.remove("name"); mit(); } Toast.makeText(MainActivity.this,"登录成功",0).show(); }else{ Toast.makeText(MainActivity.this,"登录失败",0).show(); 【file存储】 内部存储 好处: 当手机应用被卸载删除的时候,不会有过多的存于垃圾,都会被一起清理掉。 常用方法: 1.FileOutputStreamContext.openFileOutput(Stringfilename,intmode) Context.MODE_APPEND Context.MODE_PRIVATE Context.MODE_WORLD_READABLE Context.MODE_WORLD_WRITEABLE 2.FileInputStreamContext.openFileInput(Stringfilename) 3.String[]Context.fileList() 4.Context.deleteFile(Stringfilename) 文件存储的步骤: 1.通过调用openFileOutPut()的方法实例化一个文件的输出流。 2.通过调用fileOutputStream的write方法,把byte型数据存储到文件中。 3.关闭流 扩展存储(SD卡存储) 获取sdcard状态: intEnvironment.getExternalStorageState() Environment.MEDIA_MOUNTED介质已加载完 Environment.MEDIA_MOUNTED_READ_ONLY介质已加载完,但是只读状态 Environment.MEDIA_CHECKING正在检测介质 Environment.MEDIA_UNKNOWN介质未知 Environment.MEDIA_UNMOUNTED介质已卸载 获取公共目录: FileEnvironment.getExternalStoragePublicDirectory(Stringtype) Environment.DIRECTORY_MOVIES Environment.DIRECTORY_MUSIC Environment.DIRECTORY_DOCUMENTS Environment.DIRECTORY_DOWNLOADS Environment.DIRECTORY_PICTURES Environment.DIRECTORY_RINGTONES 获取根目录: FileEnvironment.getExternalStorageDirectory() 获取下载缓存目录: FileEnvironment.getDownloadCacheDirectory() 读写SD卡的步骤 1.判断手机内是否挂载了sd卡,判断是否获得了sd卡的读写使用权限Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) //判断sdcard是否挂载,同时获得了权限 FilesdcardFile=Environment.getExternalStorageDirectory(); 2.在清单文件中加入2个权限 --可以读写sd卡的内容--> name="android.permission.WRITE_EXTERNAL_STORAGE"/> --在sd卡中创建删除文件的权限--> name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 3.通过Environment.getExternalStorageDirectory()获取手机外置存储卡的地址。 4.然后就可以用FileInputStream,FileOutputStream等等来读写sd卡的文件了 【Sqlite数据存储】 SQLite简介: 是安卓系统集成的轻量级的数据库,使用c语言编写的嵌入式数据库引擎。 无数据库管理引擎,独立DB文件存在的 sqlite3工具 1.sqlite3是AndroidSDK自带的命令式数据库管理工具,其所在路径: android_sdk/tools/ 2.sqliteexpert是可视化的数据库管理工具,最新版本是3.5.38 官方下载路径: 商业版: sqliteexpertprofessional有30天试用期 个人版: sqliteexpertpersonal免费使用 3.破解版下载路径: SQLiteExpertProfessional(SQLite管理工具)v3.5.21.2440免费版 >sqlite3db_name: 启动数据库工具 sqlite>.help sqlite>.databases sqlite>.tables sqlite>.schematable_name sqlite>标准sql语句 sqlite>.readc: /aa.sql导入sql语句 sqlite>.exit 底层特点: 1.虽然SQLite的引擎非常小,但她支持存储2TB大小的数据库文件 2.以单个文件的形式存在 3.是以B—Tree的数据结构存在于磁盘中。 特点: 1.轻量级,一个数据库中可以有多个文件 2.独立性,没有依赖,无需安装 3.隔离性,全部存在于一个文件夹当中。 4.跨平台,支持多种操作系统 5.多语言接口,支持众多编程语言 6.安全性,事物 Sqlite支持的数据类型: 1.空值(null),浮点型(REAL),整数型(INTEGER),二进制(BLOB),字符串型(TEXT) 数据库操作类 1.SQLiteDatabase 1.SQLiteDatabaseopenOrCreateDatabase(Stringpath,CursorFactory) 2.SQLiteDatabaseopenDatabase(Stringpath,CursorFactory,intflags) a.SQLiteDatabase.OPEN_READWRITE以读写方式打开 b.SQLiteDatabase.OPEN_READONLY以只读方式打开 c.SQLiteDatabase.CREATE_IF_NECESSARY如果数据库不存在,则创建 3.insert(Stringtable,StringnullColumnHack,ContentValuesvalues) 4.update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs) 5.delete(Stringtable,StringwhereClause,String[]whereArgs) 6.Cursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit) 7.CursorrawQuery(Stringsql,String[]selectionArgs) 8.execSQL(Stringsql,Object[]bindArgs) 9.beginTransaction() 2.SQLiteOpenHelper: 抽象类的父类,用于管理数据库的创建和版本的更新 必须实现的方法 1.SQLiteOpenHelper(Context,StringdbName,CursorFactory,intversion) 2.onCreate(SQLiteDatabasedb)第一次创建数据库的初始化方法 3.onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)数据库更新 常用的方法 1.SQLiteDatabasegetReadableDatabase()以只读方法打开数据连接 2.SQLiteDatabasegetWritableDatabase()以读写方式打开数据库 3.Cursor 列相关操作 1.getColumnCount()获取总列数 2.getColumnName(intcolumnIndex)获取指定位置的列名 3.getColumnIndex(StringcolumnName)获取列的索引位置 4.isNull(intcolumnIndex)指定位置的列是否为null 5.getType(intcolumnIndex)获取指定位置列的数据类型 a.Cursor.FIELD_TYPE_NULLnull类型 b.Cursor.FIELD_TYPE_INTEGERint类型 c.Cursor.FIELD_TYPE_FLOAT: float类型 d.Cursor.FIELD_TYPE_STRING: String类型 e.Cursor.FIELD_TYPE_BLOB: blob类型,即对象或二进制数据类型 记录相关操作 1.getCount()获取总记录数 2.getString(intcolumnIndex)获取指定列的String类型数据 3.getInt(intcolumnIndex)获取指定列的long类型数据 4.getLong(intcolumnIndex)获取指定列的long类型数据 5.getFloat(intcolumnIndex) 6.getDouble(intcolumnIndex) 位置移动 1.booleanmoveToNext()下一行移动 2.booleanmoveToPrevious()移到初始位置,第一条记录的上方 3.booleanmoveToPosition(intposition)移动到指定位置 4.booleanmoveToLast()移动到最后一条位置 5.booleanmoveToFirst()移到第一条位置 6.move(intoffset)从当前位置向上或下移动n行,负值是向上移动,反之向下 SimpleCursorAdapter: 其父类->CursorAdapter 1.SimpleCursorAdapter(Contextcontext,intlayout,Cursorc,String[]from,int[]to) 2.SimpleCursorAdapter(Contextcontext,intlayout,Cursorc,String[]from,int[]to,intflags) a.CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER b.CursorAdapter.FLAG_AUTO_REQUERY 【数据库操作: 】 数据库的创建: 1.SQLiteDatabasedb=openOrCreateDatabase("user.db",MODE_PRIVATE,null); 2.使用数据库创建的抽象类SQLiteOpenHelper 步骤: 1.新建一个类,继承SQLiteOpenHelper类。 2.写新建的子类构造函数,和onCreate()方法和onUpdate()方法 3.在onCreate()方法中创建表。 如: db.execSQL("createtableifnotexistsusertb(_idintegerprimarykeyautoincrement,"+"nametextnotnull,sextextnotnull,ageintegernotnull)"); 4.在activity当中实例化新建的SQLiteOpenHelper的子类: SQLiteOpenHelperhelper=newSQLiteOpenHelper(this,”stu.db”) 5.通过getWritableDatabase()方法或者getReadableDatabase()方法,获得数据库的实例化对象。 SQLiteDatabasedb=helper.getWritableDatabase(); 增: 增加表中的内容: 1.用SqliteDatabase的insert(Stringtable,StringnullColumnHack,ContentValuesvalues) 2.使用【ContentValues】putXxx(Stringkey,Xxxvalues): 方法把需要插入的内容放到此对象中,然后传递到SQLiteDatabase的方法中,作为参数。 注: 每次操作后都要清空! 用clear();方法 3.用SqliteDatabase的execSQL(Stringsql,Object[]bindArgs) 删: 1.用SqliteDatabase的delete(Stringtable,StringwhereClause,String[]whereArgs) 2.用SqliteDatabase的execSQL(Stringsql,Object[]bindArgs) 改: 1.用SqliteDatabase的update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs) 查: 1.用SqliteDatabase的Cursorquery(Stringtable,String[]columns,Stringselection,String[]selectionArgs,StringgroupBy,Stringhaving,StringorderBy,Stringlimit) 2.用SqliteDatabase的CursorrawQuery(Stringsql,String[]selectionArgs) 如: Cursorcursor=db.rawQuery("select*fromdicwherewordlike? ordetaillike? ",newString[]{"%"+key+"%","%"+key+"%"}); 3.用SqliteDatabase的execSQL(Stringsql,Object[]bindArgs) 如: Cursorcursor=db.rawQuery("select*fromnews_info",null);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 存储 详解 孙霞霞著