介绍:Android开发数据存储的四种方式

时间:2013-04-19 10:48来源:未知 作者:sunplusedu 点击:
      我们在Android开发中会接触到四种数据存储方式,每种存储方式都各有不同;本文就介绍 Android开发数据存储的四种方式:
 
    一,Preferences
   
    Preferences是一个较轻量级的存储数据的方法,具体使用方法:
   
    在A中保存值:
    SharedPreferences.Editor sharedata = getSharedPreferences("data", 0).edit();
    sharedata.putString("name","shenrenkui");
    sharedata.commit();
    在B中取值:
    SharedPreferences sharedata = getSharedPreferences("data", 0);
   
    String data = sharedata.getString("name", null);
   
    Log.i(TAG,"data="+data);
   
    注 意,Context.getSharedPreferences(String name,int type)的参数更我们在创建数据的时候的数据权限属性是一样的,存储和取值的过程这有点像HashMap但是比HashMap更具人性 化,getXXX(Object key,Object defualtReturnValue),第二个参数是当你所要的key对应没有时候返回的值。这就省去了很多逻辑判断。。。。
     
   
    二,Databases
   
    Android 内嵌了功能比其他手机操作系统强大的关系型数据库sqlite3,我们在大学时候学的SQL语句基本都可以使用,我们自己创建的数据可以用adb shell来操作。具体路径是/data/data/package_name/databases。如,这里演示一下进入 com.android.providers.media包下面的操作。
   
    1, adb shell
    2, cd /data/data/com.android.providers.media/databases
    3, ls(查看com.android.providers.media下面的数据库)
    4, sqlite3 internal.db
    5, .help---看看如何操作
    6, .table列出internal数据中的表
    7, select * from albums;
    DatabaseHelper mOpenHelper;
   
    private static final String DATABASE_NAME = "dbForTest.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_NAME = "diary";
    private static final String TITLE = "title";
    private static final String BODY = "body";
   
    private static class DatabaseHelper extends SQLiteOpenHelper {
    DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
   
    @Override
    public void onCreate(SQLiteDatabase db) {
   
    String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
    + " text not null, " + BODY + " text not null " + ");";
    Log.i("haiyang:createDB=", sql);
    db.execSQL(sql);
   
    }
   
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
    }
   
    /**
    * 重新建立数据表
    */
    private void CreateTable() {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    String sql = "CREATE TABLE " + TABLE_NAME + " (" + TITLE
    + " text not null, " + BODY + " text not null " + ");";
    Log.i("haiyang:createDB=", sql);
   
    try {
    db.execSQL("DROP TABLE IF EXISTS diary");
    db.execSQL(sql);
    setTitle("数据表成功重建");
    } catch (SQLException e) {
    setTitle("数据表重建错误");
    }
    }
   
    /**
    * 删除数据表
    */
    private void dropTable() {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    String sql = "drop table " + TABLE_NAME;
    try {
    db.execSQL(sql);
    setTitle("数据表成功删除:" + sql);
    } catch (SQLException e) {
    setTitle("数据表删除错误");
    }
    }
   
    /**
    * 插入两条数据
    */
    private void insertItem() {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    String sql1 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
    + ") values('haiyang', 'android的发展真是迅速啊');";
    String sql2 = "insert into " + TABLE_NAME + " (" + TITLE + ", " + BODY
    + ") values('icesky', 'android的发展真是迅速啊');";
    try {
    Log.i("haiyang:sql1=", sql1);
    Log.i("haiyang:sql2=", sql2);
    db.execSQL(sql1);
    db.execSQL(sql2);
    setTitle("插入两条数据成功");
    } catch (SQLException e) {
    setTitle("插入两条数据失败");
    }
    }
   
    /**
    * 删除其中的一条数据
    */
    private void deleteItem() {
    try {
    SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    db.delete(TABLE_NAME, " title = 'haiyang'", null);
    setTitle("删除title为haiyang的一条记录");
    } catch (SQLException e) {
   
    }
   
    }
   
    /**
    * 在屏幕的title区域显示当前数据表当中的数据的条数。
    */
    private void showItems() {
   
    SQLiteDatabase db = mOpenHelper.getReadableDatabase();
    String col[] = { TITLE, BODY };
    Cursor cur = db.query(TABLE_NAME, col, null, null, null, null, null);
    Integer num = cur.getCount();
    setTitle(Integer.toString(num) + " 条记录");
    }
    三,Network
    这是借助Internet来存储我们要的数据,这是CS结构的存储方式,也是点一下名了。
   
    如何使用 Content Provider
   
    下边是用户经常接触到的几个典型Content Provider应用:
   
    * Content Provider Name : Intended Data
    * Browser : Browser bookmarks, Browser history, etc.
    * CallLog : Missed calls, Call datails, etc.
    * Contacts : Contact details
    * MediaStore : Media files such as audio, Video and Images
    * Settings : Device Settings and Preferences
   
    调用Content Provider资源的标准URI结构:
   
    <standard_prefix>://<authority>/<data_path>/<id>
   
    例如:
    1) 取得浏览器所有“书签”信息: content://browser/bookmarks
    2) 取得系统通讯录中的信息: content://contacts/people (如果取得某一个特定通讯记录,在路径URI的末端指定一个ID号:content://contacts/people/5
   
    简单的实例片段:
    Uri allCalls = Uri.parse("content://call_log/calls");
    Cursor c = managedQuery(allCalls, null, null, null, null);
在Android开发中我们会接触到四种数据存储方式,每种存储方式都各有不同;以下我分别列举了Android开发中的不同存储方式的特点
 
    四,Files
   
    在Android上面没有的File就是J2se中的纯种File了,可见功能之强大,这里就算是走马观花地严重路过了。
    //创建文件
    file = new File(FILE_PATH , FILE_NAME);
    file.createNewFile();
   
    //打开文件file的OutputStream
    out = new FileOutputStream(file);
    String infoToWrite = "纸上得来终觉浅,绝知此事要躬行";
    //将字符串转换成byte数组写入文件
    out.write(infoToWrite.getBytes());
    //关闭文件file的OutputStream
    out.close();
   
    //打开文件file的InputStream
    in = new FileInputStream(file);
    //将文件内容全部读入到byte数组
    int length = (int)file.length();
    byte[] temp = new byte[length];
    in.read(temp, 0, length);
    //将byte数组用UTF-8编码并存入display字符串中
    display =  EncodingUtils.getString(temp,TEXT_ENCODING);
    //关闭文件file的InputStream
    in.close();
    } catch (IOException e) {
    //将出错信息打印到Logcat
    Log.e(TAG, e.toString());
    this.finish();
    }
   
    //从资源读取
   
    InputStream is=getResources().getRawResource(R.raw.文件名)
 
   
    
分享到:

凌阳教育培训【凌阳科技旗下教育品牌】——专业的培训机构,全国唯一“按班公布学员就业去向”的诚信机构

关注我们:

全国免费咨询电话:156-0117-5697或010-62981113(转2866) 服务监督电话:010-62981113-2800

京ICP备09010168号  京公网安备11010802010586号

北京培训中心:海淀区上地信息产业基地中黎科技园1号楼3层A段

Copyright © 2017 SunplusEdu Inc. All Rights Reserved