Android数据存储与IO

来源:互联网 发布:顺丰速打软件下载 编辑:程序博客网 时间:2024/05/19 13:27

Android数据存储与IO

 

一.SharedPreference—存储简单类型的key-value对(接口)

                  提供访问key-value对的方法:

1.      boolean contains(String key)

2.      abstractMao<String,?>getAll()

3.      boolean getXxx(String key,xxxdefValue)[xxx是基本类型]

sharedPreference接口本身并没有提供写入数据的能力,而是通过内部接口,调用edit()方法获得Editor对象,Editor提供如下方法写入数据:

1.      SharedPreference.Editor clear()

2.      SharedPreference.EditorputXxx(String key,xxx value)

3.      SharedPreference.Editorremove(String key)

4.      Boolean commit();

因为SharedPreference本身是一个接口,程序无法直接创建其实例,只能通过Context提供的getSharedPreference(String name,int mode)方法来获取实例。

 

读写其他应用的SharedPreference

         1.指定访问权限

         2.创建其他程序对应的Context

            【

                            context= createContextContext(“com.io”,Context.CONTEXT_IGNORE_SECURITY);

     】

3.调用该context  的getSharedPreference(stringname,int mode)获得对象

         4.若需要 调用SharedPreference.Edit()获取相应Editor。

二.File存储

         Context提供如下两个方法打开数据文件夹的IO流:android封装了构造函数

                   FileInputStream openFileInpute(String name)

                   FileOutputStream openFileOutput(String name,int mode)

         还提供以下方法来访问数据文件夹:

                   getDir(Stringname,int mode)

                   FilegetFilesDir()

                   String[]fileList()

                   deleteFile(String)

三.读写SD卡

         1.判断是否插入了SD卡以及是否有权限

                   Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);

         2.获取外部存储器(即SD卡的目录)

                   Environment.getExternalStorageDirectory()

若不想这么麻烦完全可以使用/mnt/sdcard/路径代表SD卡路径,然后通过程序判断该路径是否存在就可知手机是否已插卡。

 

         3.使用FileInputStream、FileOutputStream、FileReader或FileWriter读写

        

权限:

         创建、删除

         <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

         写入

         <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

四. SQLite数据库

创建SQLiteDatabase对象

用如下静态方法打开一个文件对应的数据库

static SQLiteDatabase openDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags);

static SQLiteDatabase openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory,int flags);

static SQLiteDatabase openOrCreateDatabase(File file,SQLiteDatabase.CursorFactory factory,int flags);

第二个参数设为null表示使用默认工厂

执行SQL语句方法:

execSQL(String sql,Object[] bindArgs)执行带占位符的SQL语句

execSQL(String sql)执行SQL语句

rawQuery(String sql,String[] selectionArgs)执行带占位符的SQL查询

beginTransaction()开始事物

setTransactionSuccessful()设置事物标志

endTransaction()结束事物

Android考虑到部分开发者对SQL语法不熟悉,所以提供了增删改查方法来操作数据,其实完全可以通过执行SQL语句来完成。ps:大声告诉我出来混谁敢不掌握基本SQL?

Cursor:类似JDBC中的ResultSet,提供如下方法移动查询结果的记录指针

move(int offset)boolean moveToFirst() boolean moveToLast()boolean moveToNext() boolean moveToPosition(int position)boolean moveToPrevious()

实际开发中很少用这么原始的方法哒!

SQLiteOpenHelper类---管理数据库的工具类

创建SQLiteOpenHelper的子类,扩展其

onCreate(SQLiteDatabase db)当第一次创建数据库时回调该方法,可用来生成数据表结构以及添加一些初始化数据

onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当数据库版本更新时回调该方法。

构造方法:

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

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

the DatabaseErrorHandler to be used when sqlite reports database corruption, or null to use the default error handler.

其他方法:

public SQLiteDatabase getReadableDatabase ()

public SQLiteDatabase getWritableDatabase ()





0 0