第5章 全局大喇叭——详解广播机制

动态注册:告诉用户网络状态发生改变

定义内部类 NetworkChangeReceiver
该类继承自BroadcastReceiver 重写父类onReceive()方法
onCreate方法 创建IntentFilter实例 添加的action是android.net.conn.CONNECTICITY_CHANGE(网络状态发生变化时的广播 广播接收器想要接听什么广播,就在这里添加相应的action)

创建NetworkChangeReceiver实例,调用registerReceiver()方法进行注册 ,传入NetworkChangeReceiver实例和IntentFilter实例

在OnDestroy()里用unregisterReceiver()取消注册
告诉用户是否有网络:
getSystemService()方法得到ConnectivityManager实例
该实例调用getActiveNetworkInfo()得到NetworkInfo实例
NetworkInfo的isAvailable()方法可判断是否有网络

在Manifest文件里加入 user-permission权限

静态注册 开机启动

新建广播接收器 Broadcast Receiver
在Manifest里的里添加相应的action
声明权限:

自定义广播

发送标准广播:
新建广播器MyBroascastReceiver 并重写onReceive()方法

Manifest里对广播器进行修改 添加一条 name就是一会接收的广播的名字

MainActivity里
在按钮里通过Intent对象把要发送的广播的值传入
调用Context的sendBroadcast方法广播出去

有序广播

sendOrderedBroadcast()
两个参数 1.intent 2.与权限相关的字符串
在AndroidManifest中可以通过priority设置优先级
在Activity中可以通过abortBroadcast方法截断广播

本地广播

LocalBroadcastMangager的getInstance()方法得到实例

注册:调用LocalBroadcastManager的sendBroadcast

发送:LocalBroadcastManager的sendBroadcast()

第六章 数据存储全方案——详解持久化技术

文件存储

Context类中提供了一个

  • openFilePutput()
    ,可用于将数据存储到指定的文件中
    两个参数:1.文件名(不可包含路径)2.文件的操作模式
    MODE_PRIVATE 默认 同样文件名时,所写入内容会覆盖原文件中的内容
    MODR_APPEND 文件名已经存在,往文件中追加内容,不存在则创建新文件
  • openFileInput()
    1个参数:要读取的文件名
在数据被回收前存入文件

注意的点:重写onDestroy() 获取内容并调用save()把文件存储到文件中 这样保证活动销毁之前一定会调用这个方法

*save() 没看懂哭泣 *

改良 使得EditText保留上次输入的内容

对字符串进行非空判断 TextUtils.isEmpty() 传入字符串等于null或者空字符串时都返回true
setSelection()将输入光标移动到文本的末尾位置

SharedPreferences存储

键值对存储 支持不同的数据类型
得到SharedPreferences对象的三种方法:

  • Context类中的getSharedPreferences()
  • Activity类中的getPreferences()
  • PreferencesManager类中的getDefaultSharedPreferences()
    向SharedPreferences文件中存储数据步骤:
    1.调用其对象的edit() 获取SharedPreferences.Editor对象
    2.向 .Editor选项中添加数据 putBoolean() purString()等
    3.apply()提交数据
    读数据:
    1.getSharedPreferences()得到SharedPreferences对象
    2.调用getString(),getInt(),getBoolean()获取

SQLite数据库存储

SQLiteOpenHelper 抽象类
两个抽象方法 1.onCreate() 2.onUpgrade()
两个实例方法1.getReadableDatabase() 2.getWriteDatabase()
可供重写的构造方法
参数1.Context 2.数据库名3.查询数据时返回自定义的Cursor(一般null)4.当前数据库的版本号

数据类型:real表示浮点型
text表示文本类型
blob表示二进制类型

??adb shell 中出现permission denied
用su
su root均无法解决

添加数据

SQLiteDatebase中insert()
3个参数:
1.表明2.(null)未指定添加数据的情况下给某些可为空的列自动赋值NULL 3. ContentValus对象 提供了一系列put()重载

步骤:1.获取SQLiteDatebase对象
2.用ContentValues对要添加的数据进行组装

更新数据

update()四个参数 3.对应SQL语句where部分 ?是占位符
4.字符串组为第三个参数中的每个占位符指定相应的内容

删除数据

delete()参数同update

查询

query() 7个参数:
1.表名
2.指定查询哪几列,不指定则默认查询所有
3.4.约束查询某一行或者某几行的数据,不指定则默认所有行
5 指定去group by的列
6group by的数据过滤
7指定查询结果的排序方式
调用query()后会返回一个Cursor对象

LitePal 开源数据库框架

配置:1.app/build.,gradle
2.app/src/main New–>Directory 在assets里新建litepal.xml
3.修改AndroidManifest.xml文件中 对LitePalApplication进行配置
使用:
新建:

1.用面向对象的思维定义一个类
2.将类添加到映射模型列表当中 修改litepal.xml
3.修改MainActivity中 Connector.getDatabase()
升级:
直接通过加原来表的类的set get来增加新的类
1.新建新的类
2.更改litepal.xml中的

添加:
1.创建模型类的实例
2.设置要存储的数据
3.save()
进行CRUD操作室需要继承自DataSupport类

更新
法一:对已经存储的对象重新设值,重新调用save()
已经存储:model.isSaved( )
ture:
* 已经用过model.save()添加过了
* model对象是通过LitePal提供的查询API查出来的

法二;new一个实例,调用set啥啥啥(表里的属性)方法设值要更新的数据,最后用updateAll()执行* updateAll()要改成默认值 需要用setToDefault()

删除
法一: 调用已存储对象的delete()
法二:DataSupport.deleteAll()
查询

List<Book> books = DataSupport.findAll(Book.class);

调用findAll() Book.class表示要查的表 返回一个Book类型的List集合


使用API进行查询
连缀查询:

                   List<Book> books=DataSupport.select()                                                       .where()                                                       .order()                                                       .limit()                                                       .offset()                                                       .find()

测试机没有root权限,用如下方法,查看到了数据库内容

step 1: 在app的gradle中导入如下:implementation ‘com.facebook.stetho:stetho:1.3.1’

step 2:在你自定义的Application的onCreate()中加入如下代码:Stetho.initializeWithDefaults(this);

step3:保持电脑是连着手机的, 在谷歌浏览器中进入如下地址 chrome://inspect/#devices’
step4:点击inspect

更多相关文章

  1. 关于编译Android时出现Error 41的解决方法
  2. ubuntu 9.04使用adb调试Android方法
  3. cordova build android提示No installed build tools found的解
  4. Android横竖屏切换问题总结
  5. Android(安卓)录音获取麦克风实时音量
  6. FaceBook推出的Android图片加载库-Fresco
  7. Android(安卓)解决 GetLastKnownLocation(provider) = null
  8. android fragment 重复创建的问题
  9. Android(安卓)Studio 图片资源存放位置 + drawable文件夹的创建

随机推荐

  1. android一键分享功能不使用任何第三方sdk
  2. android实践--进度对话框(ProgressDialog
  3. android 解析服务端下发的颜色值
  4. Android Notification的使用
  5. Android File Hierarchy : System Struct
  6. [日更-2019.5.21] Android(安卓)系统的分
  7. android项目案例5- 基于Android studio的
  8. android databinding的使用技巧
  9. android 横竖屏锁定
  10. Relative Layout 中用到的一些属性