ContentResolver contentResolver = getContentResolver(); 我们另外新建一个工程,暂且叫做TestApp吧,在这个新的工程里面添加一个Activity...1、查询系统联系人 通过系统联系人的Uri获取系统联系人及手机号码: public void query() { showContact = ""; // 获取联系人的Cursor集合..., rawContactId); // 设置内容类型 values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE...); // 设置名字 values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);...最后想说的是,本系列文章为博主对Android知识进行再次梳理,查缺补漏的学习过程,一方面是对自己遗忘的东西加以复习重新掌握,另一方面相信在重新学习的过程中定会有巨大的新收获,如果你也有跟我同样的想法,
在通过 ContentResolver 解析数据时,URI 是必要的参数,其遵循的格式体现在ContentUris.java: Content URIs have the syntax:content:...vnd.android.cursor.dir:多行记录(集合) 例如通讯录 ContentProvider 定义了两种 MIME 类型,分别表示多条记录和单条记录: ContactsContract.java...insert() Binder 线程 delete() Binder 线程 update() Binder 线程 query() Binder 线程 onCreate() 主线程 3.1 插入数据 要插入一行新数据...Uri,格式如下: content://com.android.calendar/events URI 中的 就是该行 _ID 列的值,而前缀 content:...ContentProvider 核心类 4.1 ContentResolver 外界(包括当前进程的其他组件)无法直接访问 ContentProvider 的,而是需要通过 ContentResolver
使用系统提供的ContentProvider 其实很多时候我们用到ContentProvider并不是自己暴露自己的数据,更多的时候通过 ContentResolver来读取其他应用的信息,最常用的莫过于读取系统...这里给出如何获取URL与对应的数据库表的字段, 这里以最常用的联系人为例,其他自行google~ ①来到系统源码文件下:all-src.rar -> TeleponeProvider -> AndroidManifest.xml...接下来,创建一个新的项目,我们来实现ContentResolver的部分,我们直接通过按钮点击插入一条数据: MainActivity.java public class MainActivity extends...的db数据库取出,用图形查看工具 查看即可发现插入数据,时间关系,就不演示结果了~ 通过ContentObserver监听ContentProvider的数据变化 ?...的初探就到这里,我们学习了: ContentProvider的概念以及流程,使用系统提供的一些ContentProvider,以及定制自己的ContentProvider, 最后还讲解了通过ContentObserver
产生的原因: 潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。...里启动一个Activity,因为它会创建一个新的画面,并从当前用户正在运行的程序上抢夺焦点。...第三题:如何创建Socket 客户端编程步骤: a) 创建客户端套接字(指定服务器端IP地址与端口号) b) 连接(Android 创建Socket时会自动连接) c) 与服务器端进行通信 d)...SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发;是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view快。...在一个新启动的线程中重新绘制画面,主动更新画面。
Social APIs inContacts Provider UserProfile 最新的android包含了一个机主的个人档案,在ContactsContract.Profile表里,通过新建一个...ContactUsage Feedback 新的 ContactsContract.DataUsageFeedbackAPIs 允许你追踪用户使用特定的方法联系其他人的频度,例如用户多久使用每个电话号码或邮件...为了保证您的应用程序处理传入的NDEF消息,你也应该通过与您的“Android应用程序记录NdefMessageNdefMessage,即使其他应用程序过滤器相同的意图行动。...同时,也允许来传递字段/方法引用的功能,并允许通过代码来获取字段/方法的值,即使我们不知道字段/方法的一些具体的信息。...foo.setBar(value); 然而,如果你想传递foo实例和通过其它的代码来设置bar字段的值,在androidsdk4.0以前是没法做到的。
最好不要使用以字母I为前缀或以interface为后缀,你不觉得这样很多此一举吗?名称命名需要使用名词性的单词或短语。 4.奇葩类名和对象名 类名或对象名使用动词,使用非名词或非名词短语。...5.奇葩属性名 类的属性名为了和表的字段名称一致,名称中的单词使用下划线连接;属性名使用非驼峰式命名;使用无意义的字母或单词缩写。...6.奇葩方法名 方法名以非动词开头;方法名不能表达出方法体的意图;方法名使用以get为前缀;方法名使用单词或短语的字母缩写;方法名不遵循驼峰式命名规则。...方法名应该以动词开头,使用动词短语;动词短语应该可以表达出本方法体的意图,做到可以根据方法名看出方法做了什么;除了属性的getter方法,避免使用以get作为方法名的前缀,因为get无法说清方法的意图,...小结 命名可以通过总结的方式,归纳出属于自己的一套命名规则。
注意:如果项目采用 MVP,所有 Model、View、Presenter 的接口都以 I 为前缀,不加后缀,其他的接口采用上述命名规则。...数据类型) 对于表示集合或者数组的非常量字段名,我们可以添加后缀来增强字段的可读性,比如: 集合添加如下后缀:List、Map、Set。...当时用到这些类的时候,我们 必须 将它们的键定义为 static final 字段,并遵循以下指示作为前缀。...= "BUNDLE_AGE"; static final String ARGUMENT_USER_ID = "ARGUMENT_USER_ID"; // 与意图相关的项使用完整的包名作为值的前缀...对每个函数的调用应该在新的一行中,我们把换行符插入在 .
类方法 android中方法排序首先生命周期方法在最上方,排序按照自然生命周期的排序 其余方法按照调用先后顺序往下排列 方法体内不要多余无意义的空行,代码紧凑 ?...文件和目录命名规范 工程目录下所有文件夹名一律用小写字母 drawable目录所有图片资源一律以 ic_ 为前缀开头 同一资源图片不同尺寸一律相同命名以尺寸大小为后缀,如 ic_default_600..._400 , ic_default_300_200 adapter类的填充展示布局一律以 item_ 为前缀 listview 和recycleview等类似头部和尾部布局概念分别以 head_ ,...foot_ 为前缀 shape 文件 和 selector 文件 分别以 shape_ , selector_ 为前缀 色值命名 以色值本身的名字来命名,而不是以功能性的名称表达如 btn_bg,...2.创建的java文件上方最少注明作者和创建时间等简要信息,这个可以通过设置androidstudio模板减少工作量. ?
下面我将从Android.mk和CMake这两种方式教大家如何进行开发。文章结尾将给出演示的项目代码,如果你能耐心地仔细看完,相信你一定能掌握如何在Android下进行JNI开发。...(3)LOCAL_MODULE:调用的库名,用来区分android.mk中的每一个模块。文件名必须是唯一的,不能有空格。注意,这里编译器会为你自动加上一些前缀lib和后缀.so,来保证文件是一致的。...,不要加前缀 lib 和后缀 .so,不然会报错:java.lang.UnsatisfiedLinkError: Couldn’t load xxx : findLibrary【findLibrary...# TODO 添加第三方库 # TODO add_library(libavcodec-57 # TODO 原先生成的.so文件在编译后会自动添加上前缀lib和后缀.so, # TODO 在定义库的名字时...,不要加前缀lib和后缀 .so, # TODO 不然会报错:java.lang.UnsatisfiedLinkError: Couldn't load xxx : findLibrary
、判断是否更新某一个字段、判断是否插入某个字段的值。...item :表示在迭代过程中每一个元素的别名 index :表示在迭代过程中每次迭代到的位置(下标) open :前缀 close :后缀 separator...='' "> HOBBY = #{hobby}trim标签trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者是...trim属性主要有以下四个prefix:前缀覆盖并增加其内容 suffix:后缀覆盖并增加其内容 prefixOverrides:前缀判断的条件 suffixOverrides...:后缀判断的条件<if test="name !
theme: condensed-night-purple 可观察性是指一个对象将其数据变化告知其他对象的能力。通过数据绑定库,您可以让对象、字段或集合变为可观察,在其数据发生更改时通知其他对象。...所有生成的绑定类都是从 ViewDataBinding 类继承而来的。 默认情况下,类名称基于布局文件的名称布局文件名称根据驼峰式命名并在末尾添加 Binding 后缀。...= DataBindingUtil.bind(viewRoot) 如何查找布局 以往传统布局通过findViewById传入R.id.具体名称查找,但是现在布局文件中的id字段被扩展为了布局绑定类中的变量...数据绑定的数据 在xml中定义数据实体Bean,通过data标签定义变量名称和类型,即可在xml中利用简单的布局表达式填充内容。 那么数据如何传入进去呢?...xml中使用,很常见的一种情况通过数据的某个字段来判断是否显示,这个时候需要引用View的Gone和Visible。
增加过滤表前缀 addTableSuffix(String...) 增加过滤表后缀 addFieldPrefix(String...)...增加过滤字段前缀 addFieldSuffix(String...)...增加过滤字段后缀 entityBuilder 实体策略配置 controllerBuilder controller 策略配置 mapperBuilder mapper 策略配置 serviceBuilder...,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间 .idType(IdType.AUTO)...@NoArgsConstructor @AllArgsConstructor 代码生成的实体类时间是Date,如果需要用到自动填充就需要手动将时间的字段改成LocalDateTime类型 -
注意: 如果项目采用MVP,所有Model、View、Presenter的接口都以I为前缀,不加后缀,其他的接口采用上述命名规则。...Type:类型 考虑到Android中使用很多UI控件,为避免控件和普通成员变量混淆以及更好达意,所有用来表示控件的成员变量统一加上控件缩写作为后缀(文末附有缩写表)。...对于普通变量一般不添加类型后缀,如果统一添加类型后缀,请参考文末的缩写表。 用统一的量词通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。...说明: 集合添加如下后缀:List、Map、Set 数组添加如下后缀:Arr 注意:所有的VO(值对象)统一采用标准的lowerCamelCase风格编写,所有的DTO(数据传输对象)就按照接口文档中定义的字段名编写...所有Activity或Fragment的contentView必须与其类名对应,对应规则为: 将所有字母都转为小写,将类型和功能调换(也就是后缀变前缀)。
随着应用程序被添加到系统中,他们可以通过添加新的动作,类型和类别来扩展这种语言,或者通过提供它们自己的活动来修改现有短语的行为。 意图解析 你将使用两种主要的意图形式。...当使用隐式意图时,给定这样一个任意的意图,我们需要知道如何处理它。...{action = android.app.action.MAIN,category = android.app.category.LAUNCHER}是Launcher用来填充顶级列表的实际意图。...串 EXTRA_ALARM_COUNT AlarmManager在intent中用作一个int外部字段来告诉被调用的应用程序有多少未决的警报正在被意图传递。...串 EXTRA_REPLACING 在ACTION_PACKAGE_REMOVED 意图中用作布尔额外字段以表示这是对包的替换,所以这个广播将立即跟随相同包的不同版本的添加广播。
前缀部分需要足够的位数以允许分配唯一的网络号给互联网上的每一个物理网络,后缀部分也需要足够的位数以允许从属于同一网络的每一台计算机都分配到一个唯一的后缀。但这不是简单的选择就可行的。...因为一部分增加一位就意味着另一部分减少一位,选择大的前缀可容纳大量网络,但限制了每个网的大小;选择大的后缀意味着每个物理网络能包含更多的计算机,但限制了网络的总数。...原则上,n位前缀允许2n个不同的网络,n位后缀允许在给定的网络上废品2n台主机,下面就是五类地址的范围:①A类IP地址一个A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码...但当前互联网社会所使用的设备几乎都是以 IPv4 地址协议来支撑,而 IPv4 与 IPv6 格式并不统一且协议内容并不兼容,那么两者的区别到底在哪? IPv6的格式又是如何规定与分类呢?...选择项(Options):鉴定额外的业务。填充区( Padding):确保报头的长度为32位的整数倍。IPv6报头各项功能:IPV6数据报格式由3部分组成:IP而数据报头、扩展(下一个头)和高层数据。
免费下载地址:http://www.redisant.cn/da Windows 原生:Data Assistant 使用 Windows Native 技术,这保证软件具有极小安装体积和极高的响应速度...快速生成:创建小型或大型数据集,用于表、结构和脚本的快速原型设计或压力测试。 真实数据:为任何开发、测试或演示目的生成大量、异构、真实的数据,而不是仅仅通过复制和粘贴创建重复的不切实际的文本字段。...基于文档:您创建的数据结构被完整保留,可以为不同的目的创建不同的数据集。...字段微调:可以对任何字段使用可选的前缀和后缀;对随机数据填充字段,指定长度或长度范围; 对数字字段指定范围;对日期范围使用格式化字符串决定输出内容。
EntryId(一般是默认0x7f+两位+四位) 3.aapt命令在打包过程中都做了什么 1)把assets和res目录下的所有资源、AndroidManifest.xml,都保存在一个后缀名ap_...AAPT命令,在插件apk打包过程中,通过指定资源id的前缀,比如0x71,来保证宿主和插件的资源id永远不会冲突 1)在AAPT的命令行参数中传递apk打包时的前缀值 2)把这个值设置给Bundle...实体的mApkModule字段,作为ResourceTable构造函数的参数传递进去 3)在ResourceTable的构造函数,读取Bundle参数中的mApkModule值,也就是前缀值,设置给...都是c代码,就不贴了 4)把新的AAPT工具命名为aapt_mac,放到项目根目录下 apply plugin: 'com.android.application' import com.android.sdklib.BuildToolInfo...详细的代码见资源的插件化 方案1的缺点是资源id的前缀是有限的,就256个值,当一个app中有多于256个插件时,就要考虑方案2了 --摘自《android插件化开发指南》
八、代码补全工具: 1.Android Postfix Completion 可根据后缀快速完成代码,这个插件在Android Studio原有的基础上增添了一些新的功能 。...Studio插件,将通过逐个文件去配置模板的方式改进为通过插件来实现,对于简单的模板制作,只需要一键即可生成。...这是一个Gradle插件,所以如何配置可以去github的源码上看。...gradle-packer-plugin 是Android多渠道打包工具Gradle插件,可方便的于自动化构建系统集成,通过很少的配置可实现如下功能 : 支持自动替换AndroidManifest文件中的...详细可参考说一说Android Studio和IDEA中一个很有用的内存调试插件一文。 示意图: ? 示意图 ?
打开bless查看prefix1文件,观察得到填充区域的字节长度n。 接下来截取后缀部分,由于前缀生成了n字节的填充域,因此后缀的长度为文件总长度-n-m字节。...简而言之,上述过程就是把对前缀进行md5碰撞产生的填充域替换了xyz中的一部分。 最后把前缀与后缀拼接在一起即可得到输出结果不同但是md5散列值相同的两个可执行文件了。...12352+128+1之后的字节截取作为后缀suffix tail -c +12481 task2 > suffix 将suffix与prefix1和prefix2重新拼接并执行,发现无执行权限,通过chmod...我们通过截取文件内容,并利用工具构造碰撞填充域,然后将填充域替换可执行文件中的变量区域,这样就完成了prefix+填充域(长度为64字节的倍数)对于prefix+其他内容(长度为64字节的倍数)的替换,...所以我们可以通过构造填充域、适当的拼接内容来绕过md5算法对于文件完整性和真实性的保护,比如让做到不同行为的两个可执行文件具有相同的MD5值。
回顾 "温故而知新" 通过思维导图回顾一下我们学了什么,我们先学了什么是线性结构,栈(Stack)是一种抽象数据类型的线性结构,栈是什么,栈的特点以及操作步骤,我们还可以通过列表去实现栈,不过不同的栈顶其对应的时间复杂度也不同...C将变为前缀的"+A*BC"后缀的"ABC*+"为了帮助理解,子表达式加了下划线 在前缀和后缀表达式中,操作符的次序完全决定了运算的次序,不再有混淆 所以在很多情况下,表达式在计算机中的表示都避免使用复杂的中缀形式...,让我们看看如何将其转换成前后缀表达式吧~ 中缀表达式转换为前后缀形式的方法 ✨Summary: (1)将中缀表达式转换为全括号形式 (2)将所有的操作符移动到子表达式所在的...,采用一个栈来暂存未处理的操作符 这样,栈顶的操作符就是最近暂存进去的,当遇到一个新的操作符,就需要跟栈顶的操作符比较下优先级,再行处理--->新符号和栈顶对比,新的高,就入栈(因为取时也先取);...', 'B', ' * ', 'C'] 流程示意图: 图解: 转成后缀表达式对应的代码 class Stack:#Stack---->ADT def __init__(self):
领取专属 10元无门槛券
手把手带您无忧上云