Android学习之数据存储整理

      SharedPreferences,内部存储,外部存储,sqlite,ContentProvider,网络,都可以作为android数据存储的方式,本文只简单了解前面四种

1.SharedPreferences:

SharedPreferences以键值对的形式储存数据,只能储存int,long,float,boolean,string类型的值,具体使用:

//1.存储数据
//获取指定名字的SharedPreferences对象(getSharedPreferences是Context类的函数),第二个参数传0即可
SharedPreferences sp = getSharedPreferences(“name”, 0);

//获取相应的Editor对象,edit()会在检测是否有名为“name”(上面传的)的文件,如果没有则在内存中创建name.xml文件
SharedPreferences.Editor editor = sp.edit();

//存放bool值
editor.putBoolean("booleankey", true);
//存放int值
editor.putInt("stringkey", “str”);

//移除某个值
editor.remove("key");

//只有调了commit函数上面的操作才会生效
editor.commit()

//2.访问数据
//获取指定名字的SharedPreferences对象,第二个参数传0即可
SharedPreferences sp = getSharedPreferences(“name”, 0);

//获取boolean类型值,false为默认值,如果booleankey所对应的值不是boolean类型值,抛ClassCastException下同
sp.getBoolean("booleankey",false)

//获取boolean类型值
sp.getInt("booleankey",5)
2.内部存储

一般情况下情况下内部存储是应用程序私有的,不允许其他应用或用户访问。其根路径是/data/data/[应用包名]/,具体使用:

获取文件输入输出流,当指定名字的文件不存在时会创建
FileOutputStream fos = openFileOutput(String name, int mode);
FileInputStream fis = openFileInput(String name, int mode);
其中第二个参数可以是下面几个值的的
Context.MODE_WORLD_WRITEABLE :允许其他程序写入该文件
Context.MODE_PRIVATE :        只允许本程序访问
Context.MODE_WORLD_READABLE : 允许其他程序读取该文件
但是从android17开始MODE_WORLD_WRITEABLE和MODE_WORLD_READABLE已经弃用,而且在android N以后的版本使用会报错

Context还包括了其他几个有关内部文件操作的函数
Flie getCacheDir()  返回内部文件系统缓存目录。
File getFilesDir()  返回内部文件系统目录。
File getDir(String name, int mode)  在内部存储空间内创建(或打开现有的)目录。
deleteFile(String name)  删除保存在内部存储的文件。
String[] fileList()  返回应用当前保存的一系列文件。

3.外部存储(以下介绍不考虑7.0及以上的访问特定目录)

一般情况下情况下外部存储允许其他应用或用户访问
1).外部存储需要在清单文件中添加访问权限

<manifest ...>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
其中WRITE_EXTERNAL_STORAGE是包含READ_EXTERNAL_STORAGE的

2).检测外部存储状态

/* 检测外部存储是否可读可写 */
public boolean isExternalStorageWritable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state)) {
        return true;
    }
    return false;
}

/* 检测外部存储是否可读 */
public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}
Environment.getExternalStorageState() 返回外部存储的状态。Environment预定了一些状态常量

3).外部存储常用函数

//获取下载缓存目录
Environment.getDownloadCacheDirectory();

//获取系统目录,路径为/system,该目录是只读的
Environment.getRootDirectory();

//Context类的方法,Context类的非静态方法返回的一般都是应用程序私用的,当其他应用和用户依然可以访问到

//返回外部存储某个私有目录,跟getExternalStoragePublicDirectory的区别在与于getExternalFilesDir储存的文件系统的媒体程序扫描是不会关联上,但是两者的文件其他应用和用户都是可以访问的
getExternalFilesDir(Environment.DIRECTORY_MUSIC);

//返回外部存储私有缓存目录,其他应用和用户都是可以访问的
getExternalCacheDir();

4.SQlite

SQlite是android内置的一个小型的数据库,操作的语句和其他数据库大同小异。使用步骤:
1.继承SQLiteOpenHelper
2.通过getReadableDatabase()或getWritableDatabase()获取SQLiteDatabase对象,两个行数返回的是同一个对象,只是设置了不同权限
3.利用query(),execSQL()操作数据库,其中execSQL()用于执行无法回sql语句(如创建表,插入等),query()用于查询,放回Cursor对象
4.SQLiteDatabase.close关闭数据库

public class MyOpenHelper extends SQLiteOpenHelper {

    private static final String CREATE_TABLE = "create table TableName(name1 text,name2 text);";

	/**
     * 
     * @param context    上下文
     * @param name        数据库名称
     * @param factory     Cursor工厂类,用于创建Cursor,传null使用默认工厂类
     * @param version      数据库版本号,传入的值只能大于等于当前值,初始为1
     */
    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, name, factory, version);
    }

    public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
        super(context, name, factory, version, errorHandler);
    }

	//第一次调用getReadableDatabase()或getWritableDatabase()时会回调该方法,在该方法中可以做一些数据库的初始化工作,如创建表
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		//数据库版本号升级时回调
    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值