前言:我知道有好些时间没有写日志了,感觉好像让偷懒的魔神控制住自己,但好在我还有自己的信仰,还有自己崇拜的技术偶像,还有一帮很厉害的同学激励着我继续前进,不管是有或者没有帮助过我,然而他们所发生以及做的事其实也在潜移默化的感染着我,我觉得 人或者总得有个信仰 或者 爱好,这将会成为你一直努力的源泉,比如你想过好生活,你想买个礼物给你对象,你想在同学面前装个X,对吧。
三种方式: 1.文件 2.SharedPreferences 3.数据库
文件: 无非读和写两种操作
写
FileOutputStream openFileOutput(String filename,Contents常量);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(上面的文件输出流对象))
读
FileInputStream openFileInput(String filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(上面的文件输入流对象));
while((line=reader.readLine())!=null) //按行读取
别忘了 在finially里把 流对象关闭!
SharedPreferences
用来存放一些内容较少的数据 这种存储结构有点像HashMap key-value
1.首先获取SharedPreferences对象
三种方式:通过Context的getSharedPreferences() 参数: 文件名称 ;操作模式 。 MODE_PRIVATE
Activity getPreferences() 参数:操作模式
PreferenceManager 类中的 getDefaultSharedPreferences(this)
2.通过获取的对象 调用其edit() 方法 获取 SharedPreferences.Editor 对象
3.向 SharedPreferences.Editor对象添加数据 putString(key,value) putBoolean(k,v);
4.调用 commit() 提交数据
获取 SharedPreferences 数据
1.获取 SharedPreferences 对象 (同上)
2.put 变 get
3.结束
SQLite 数据库
是最常用的存储数据的方式 也是我学的到目前为止最烦的 这里请允许我BB一下 因为很难调试 我之前写过一篇文章 关于真机调试的
其实目的就是在于看见真实的数据库文件 然而事与愿违 由于我用小米3调试的 由于系统是稳定版 所以我去刷了个机 这个很容易
官网下个开发包就ok 然而更新好了之后发现 发现没有system的文件权限 并且没有自带的sqlite3 也就是说没法adb shell下运行sql语句
你只有chmod到你的开发包下 去把你创建的db文件拷贝出来 用sqlite软件打开才能读取 可想而知的麻烦程度 当然这也是最死的办法了
也有聪明一点 直接通过查询语句将 创建的数据通过Log打印到Console下来查看 那么就解决了 之前为什么说root了之后还没有system权限
查了好久 发现小米的root权限被小米的开发团队阉割过 也就是并非完全的root,在2016年一月以后的系统都不行了 后来我去网上找了这之前的版本
刷机之后 各种问题 所以就放弃了 怕最后变成砖头 这样我连测试机都没有的玩了
数据库无非就是 CRUD操作 + 事务处理
android提供了很好的封装类给我们进行操作 SQLiteDatabase 对象所提供的CRUD方法 或者 我们可以直接运行sql语句
1.通过 SQLiteOpenHelper 的 getReadableDatabase() 或 getWritableDatabase() 获得 SQLiteDatabase 对象
2.通过 insert() update() delete() query() 或者 execute() 执行 String sql语句 这里的是sqlite 数据类型有些不一样
事务: 1.在执行CRUD 或者 execute 之前 先调用 beginTransaction() 开启事务
2.try-catch 包含数据库操作
3.成功 调用 setTransactionSuccessful()
4.finally里 调用 endTransaction() 结束事务
一般数据库类 是通过继承 SQLiteOpenHelper 类 来实现的
这个类里有个 onUpgrade(SQLiteDatabase,int oldVersion,int newVersion) 用来更新app的数据库
若newVersion版本等级高于app里的数据库版本 则会回调这个方法 通过oldVersion这个参数可以对老版本进行定制化的修改