- 博客(52)
- 收藏
- 关注
原创 《Kotlin核心编程》阅读笔记 第七章 多态和扩展
第七章 多态和扩展Kotlin的扩展其实多态的一种表现形式。多态的不同方式多态是面向对象程序设计 的一个重要特性。当用一个子类继承一个父类的时候,这就是子类型多态(Subtype polymorphism)。另一种熟悉的多态是参数多态(Parametric polymorphism)。子类型多态用子类型替换超类型实例的行为,就是子类型多态。参数多态...
2021-05-29 17:01:47
355
原创 windous 共享连接时出现的问题
目前已为连接’wireless_32768’启用Internet 连接共享。lnternet连接共享访问被启用时,出现了一个错误。这是我的一些网络适配器。我想把自己的网络共享给VM虚拟机使用(即VMware Network Adapter VMnet1)。在更换网络以后,想重写共享网络就出现上的问题。在我把几个适配器禁用后发现本地链接*3这适配器竟然消失了。解决方案(图片上有些字,可放大看看)此时就不会出现上面的问题。先得取消之前共享。直接取消勾选就自动取消之前的勾选了。然后在
2021-05-25 22:59:54
4463
1
原创 《kotlin核心编程》阅读笔记 第九章 设计模式
《kotlin核心编程》阅读笔记 第九章 设计模式第九章 设计模式创建型模式伴生对象增强工厂模式使用单例代替工厂类伴生对象创建静态工厂方法扩展伴生对象方法内联函数简化抽象工厂用具名可选参数而不是构建者模式具名的可选参数require 方法对参数进行约束第九章 设计模式基于Kotlin崭新的语言特性,实现或替换了Java中部分典型设计模式。GoF针对常见设计模式分类:创建型模式、行为型模式、结构型模式。创建型模式创建怎样的对象,如何且合适创建它们,以及对类和对象的配置,都是实际代码中编写中需要考虑的
2021-05-15 22:51:33
863
原创 《Kotlin核心编程》阅读笔记 第八章 元编程
第八章 元编程Java的反射只是元编程的一种方式。示例:将data class 转换成 Map的例子。data class User (val name:String,val age:Int){ fun toMap(a:User):Map<String,Any> { return hashMapOf("name" to name,"age" to age) }}这样实现有一个缺点:对每一个新的类型我们都需要重复实现toMap函数,因为每个类型都拥有不
2021-05-15 19:56:38
577
1
原创 《Kotlin核心编程》阅读笔记 第五章 类型系统
第五章 类型系统null引用在Java中如何解决空指针异常:函数内对于无效值,更倾向于抛异常处理。采用 @NotNull / @Nullable 标注使用专门的Optional 对象对可能为null的变量就行装箱。可空类型在Kotlin中,可以在任何类型后面加上“?" Int? 等同于 Int or null由于null 只能被存储在Java的引用类型中,所以在Kotlin中基本数据类型的可空版本都会使用该类型的包装形式,同样,如果使用基本数据类型作为泛型类的类型参数,Koltin同
2021-05-14 12:19:47
275
原创 《Kotlin 核心编程》阅读笔记
《Kotlin 核心编程》阅读笔记第四章 代数数据类型和模式匹配代数数据类型(ADT)计数积类型和类型和密封类构造代数数据类型类型匹配常见的模式处理嵌套表达式第四章 代数数据类型和模式匹配代数数据类型(ADT)在计算机编程中,特别是函数式编程与类型理论中,ADT 是一种组合类型(composite type)。一个类型有其他类型组合而成。可以将一些简单的类型通过某种“操作符”而抽象成比较复杂而且功能强大的类型。计数每种类型在实例化的时候,都会有对应的取值,比如Boolean 类型存在两种可能取值
2021-05-13 19:08:27
317
2
原创 《Kotlin核心编程》阅读笔记
《Kotlin核心编程》第三章 面向对象更简洁地构造类的对象延迟初始化主从构造方法:不同的访问控制原则什么是里氏替换原则?可见性修饰符使用委托代替多继承从static 到 object伴生对象(companion object):object 单例object 表达式object表达式和Lambda表达式哪个更适合代替匿名类第三章 面向对象更简洁地构造类的对象在Java中,通过重载构造函数,来实现任意参数组合来创建对象,但是这样需要实现的构造方法就会很多。koltin的解决方法:构造函数默认参数
2021-05-12 15:20:00
263
原创 《Kotlin 核心编程》阅读笔记
第二章 基础语法在Kotlin中,如果函数没有返回值,函数会默认被当成 Unit 类型。而 Java 中是void 关键字来标识的。它们的区别是什么? Unit 是一个类型,而void 是一个关键字。val : 引用不可变, 使用 val声明的变量具有Java 中的final关键字效果。这里强调的是引用不可变。优先使用val 来避免副作用:尽可能采用val、不可变对象及纯函数老设计程序。Kotlin 天然支持了部分函数式特性。函数式语言一个典型的特征就在于 函数是头等公民。高
2021-05-11 10:56:46
201
原创 Activity的工作流程
Activity的工作流程系统内部到底是如何启动一个Activity的呢?新的Activity对象是在何时创建的?Activity的onCreate 方法何时被系统回调的呢?分析Activity的启动流程:从Activity的startActivity 方法开始分析,startActivity 方法有多种重载方式,但是他们最终都会调用startActivityForResult 方法。public void startActivityForResult(@RequiresPermission
2021-04-19 11:18:48
923
原创 Android 应用数据和文件(记录一下)
数据和文件存储概览Android使用的文件系统类似于其他平台的基于磁盘的文件系统;系统提供了以下几种保存应用数据的选项。应用专属存储空间:存储仅供应用使用的文件,可以存储到内部存储卷中的专属目录或外部存储空间中的其他专属目录。使用内部存储空间中的目录保存其他应用不应访问的敏感信息。共享存储:存储您的应用打算与其他应用共享的文件,包括媒体、文档和其他文件。偏好设置:以键值对形式存储私有原始数据。数据库:使用 Room 持久性库将结构化数据存储在专用数据库中。您的数据需要占用多
2021-04-17 14:35:45
478
2
原创 触摸事件的传递过程
触摸事件的传递过程触摸事件的传递过程事件传递细节事件传递和Activity的关系ACTION_DOWN 没有被处理后点击位置没有子View时的处理点击位置有多个子View重叠的处理拦截子View事件的处理触摸事件坐标的转换onTouch 和 onTouchEvent 的关系参考自 Android 应用开发进阶触摸事件的传递过程事件传递过程涉及的几个API如下:dispatchTouchEvent : 分发事件。如果返回true,表示事件分发下去后被处理了;返回false,则表示分发下去后没有被任何v
2021-04-09 17:01:19
238
1
原创 View的绘制流程
View的绘制流程View 和 ViewGroupView的继承树:从View的继承树中可以看出,常见的TextView、ImageView均是继承于View的。还有一个比较重要的ViewGroup也是继承于View的。ViewGroup的继承树:我们平时使用的一些布局就是ViewGroup的(用于包含其他的View),ViewGroup本身就是View。View的绘制流程一般我们的页面都是通过Activity中的onCreate()方法中的setContentView()设置进去的。
2021-04-09 13:12:23
150
原创 Android NestedScrollView嵌套RecyclerView的问题
Android NestedScrollView嵌套RecyclerView的问题问题出现原因具体的问题解决方案具体解决获得完全展示RecyclerView所需的长度问题出现原因想做到这么一种效果,页面中既有轮播图,又有RecyclerView,当RecyclerView上滑时,轮播图会消失。而这样就会出现一个问题。具体的问题打印出log,分别在适配器中的onBindViewHolder和onCreateViewHolder 也打印log。这里准备的数据有52条,结果这一下全部加载出来了,
2021-01-04 15:49:25
3696
1
原创 android TabLayout与ViewPager的结合使用(类似今日头条的首页滑动)
TabLayout与ViewPager的结合使用两者结合使用的效果下面代码的实现效果实现注意两者结合使用的效果上边的分类块滑动的时候,下面的viewpager 也跟着切换,下面的viewPager滑动,上面的分类也随着变。下面代码的实现效果实现这里就简单的实现相应功能。写布局对应的布局文件:activity_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="htt
2021-01-02 16:10:13
604
原创 android RecyclerView的简单使用
RecyclerView的使用不会特别深入,只是日常简单的使用而已。深入的文章可以参考其他博客。使用步骤1、在需要的地方放置RecyclerView控件(这里需要事先选择依赖库:recyclerview库----> implementation ‘androidx.recyclerview:recyclerview:1.1.0’ )implementation 'androidx.recyclerview:recyclerview:1.1.0'2、在逻辑代码中找到RecyclerVi
2020-12-04 18:18:28
288
原创 Android Studio 4.0 插件下载
Android Studio 4.0 插件下载其他博客上写了很多的解决关于AS插件搜索和下载缓慢的问题,但是,我尝试一下,还是没有解决我的问题。(今天看到了一遍AS插件推荐的文章,看到了几个不错的插件想自己弄,然后就发现了这个问题)解决方案既然直接在AS里面无法搜索和下载,那我们就换个方法实现目标——直接从官网下载插件,然后安装到AS里面。插件下载官网地址:点这里访问:https://plugins.jetbrains.com/androidstudio,下载的时候可能网速比较慢,可以通过使用外网
2020-07-21 21:53:31
1386
1
原创 第一行代码 第三版 第8章 8.5 kotlin 课堂 :泛型和委托
第8章 Kotlin 课堂8.5 kotlin 课堂 :泛型和委托8.5.1 泛型的基本用法8.5.2 类委托和委托属性三级目录8.5 kotlin 课堂 :泛型和委托8.5.1 泛型的基本用法泛型 : 允许我们在不指定具体类型的情况下进行编程,可以是我们的代码拥有更好的拓展性。泛型 主要有两种定义方式: 定义泛型类 定义泛型方法; 语法结构是****class MyClass <...
2020-05-03 20:50:31
300
原创 第一行代码 第三版 第11章网络技术 11.6.1 Retrofit 应用 报错:android.system.ErrnoException: isConnected failed: ECONNRE
在学习第11章 11.6.1Retrofit用法,这节的时候发生的报错:书上关于这个地方并没有说。我搜索问题的关键语句是:java.net.ConnectException: Failed to connect to /127.0.0.1:80Caused by: java.net.ConnectException: failed to connect to /127.0.0.1 (port...
2020-04-29 15:18:50
1321
原创 第一行代码 第三版 第8章 ContentProvider 8.2 运行时权限
第8章 ContentProvider8.2 运行时权限8.2.1 Android 权限机制详解8.2.2 在程序运行时申请权限8.2 运行时权限Android6.0时引入的,为了更好地保护用户的安全和隐私。8.2.1 Android 权限机制详解Android中常用的权限分成了两类:普通权限和危险权限。(还有特殊权限,使用比较少)危险权限必须由用户手动授权才可以,因为危险权限可能会触及...
2020-04-27 21:59:07
429
原创 第一行代码 第三版 第11章网络技术 11.4 解析JSON格式数据 以及回调的实现
第11章网络技术11.4 解析JSON格式数据11.4.1 使用JSONObject14.4.2 使用GSON三级目录11.4 解析JSON格式数据准备数据:11.4.1 使用JSONObjectJSONObject这是官方提供的由于在服务器中定义的是一个JSON数组。将返回的数据传入一个JSONArray对象中;循坏遍历JSONArray对象,从中取出的每一个元素都是一个JSON...
2020-04-26 23:26:12
296
原创 第一行代码 第三版 第11章 网络技术 11.3解析XML格式
第11章 网络技术11.3 解析XML格式数据11.3.1 Pull 解析方式11.3.2 SAX解析方式11.3 解析XML格式数据11.3.1 Pull 解析方式创建一个XmlPullParserFactory的实例,借助这个实例得到XmlPullParser 对象;调用 XmlPullParser 对象的setInt()方法将服务器返回的XML数据设置进去,然后开始解析;通过 ge...
2020-04-25 23:52:51
575
原创 第一行代码 第三版 第11章 网络技术 11.1~11.2OkHttp
第11章 使用网络技术11.1 WebView的用法二级目录三级目录11.1 WebView的用法用于在应用程序中展示一些网页,借助WebView控件,我们可以在自己的应用程序中嵌入一个浏览器。 <WebView android:layout_width="match_parent" android:layout_height="match_par...
2020-04-25 16:06:49
942
原创 第一行代码 第三版 7.6.1简化Preferences中最后一种方法使用KTX拓展库时出现的问题
代码无法运行错误详情 :Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6 Please spcify proper ‘-jvm-target’ option解决办法:在app/build.gradle 中的andriod 闭包中加入下列代...
2020-04-24 23:16:20
256
原创 第一行代码 第三版 第七章 7.4 SQLite数据库
SQLite数据库SQLite创建数据库三级目录SQLiteSQLite是一款轻量级的关系型数据库,支持标准的SQL语法,还遵循了数据库的ACID事务。用于存储大量复杂的关系型数据创建数据库SQLiteOpneHelper类:可以非常简单的对数据库进行创建和升级。它是一个抽象类。如果我们要使用它,就需要创建一个自己的帮助类去继承它。必须重写类中的两个方法:onCreateView() ...
2020-04-24 10:45:16
309
原创 第一行代码 第三版 第七章 数据存储持久化技术 7.3SharedPreferences存储
7.3 SharedPreferences存储使用键值对的方式存储,SharedPreferences支持多种不同的数据类型存储。7.3.1 将数据存储到SharedPreferences中获取SharedPreferences对象的两种方法:Context类中的getSharedPreferences()方法。接受两个参数:第一个参数 :用于指定SharedPreferences文...
2020-04-23 23:10:40
198
原创 第一行代码 第三版 第七章 数据储存持久化技术 7.1~7.2文件存储
7.1 持久化技术的简介数据持久化 : 将那些内存中的瞬时数据保存在设备中,保证即使手机或计算机关机的情况下,这些数据仍然不会丢失。持久化技术 :可以让数据在瞬时状态和持久状态之间进行转换。7.2 文件存储它不对存储的内容进行任何格式化的处理。适合存储一些简单的文本数据或二进制数据。如果你想使用文件存储的方式保存一些较为复杂的结构化数据,就需要订一套自己的格式规范,方便之后将数据从文件中...
2020-04-23 21:30:28
182
原创 第一行代码 第三版 第6章 6.5Kotlin课堂 :高阶函数
6.5 高阶函数6.5.1 定义高阶函数高阶函与Lambda的关系密不可分。接受Lambda参数的函数可以称为具有函数式编程风格的API。如果要定义自己的函数式API,就需要借助于高阶函数来实现。什么是高阶函数:如果一个函数接受另一个函数作为参数,或者返回值类型是另一个函数。kotlin中的新类型–函数类型,函数类型的语法规则为:(String, Int) -> Unit-...
2020-04-23 19:20:28
267
原创 第一行代码 第三版 第6章 6.3发送自定义广播
6.3 发送自定义广播6.3.1 发送标准广播默认情况下,我们发出的自定义广播都是隐式广播。先创建一个BroadcastReceiver 用于接收此广播,在AndroidManifest.xml中修改,让这个BroadcastReceiver 接收我们发送的广播。发送自定义广播的逻辑: 1.构建一个Intent对象,并将要发送的广播的值传入,2.调用Intent的setPackage()...
2020-04-19 18:38:51
320
原创 第一行代码 第三版 第6章 广播机制 6.1-6.2
第6章 广播机制6.1 广播机制简介Android中的每一个应用程序都可以对自己感兴趣的广播进行注册。这些广播可能来自于系统的,也可能来自于其他的应用程序。广播的类型:标准广播:是一种完全异步执行的广播,广播发出后,所有的BroadcastReceiver 可以几乎同时收到这条广播的信息。效率比较高,但是也是无法截断的。有序广播:是一种同步执行的广播,同一时刻只能有一个Broadca...
2020-04-19 14:49:53
364
原创 第一行代码 第三版 5.6 kotlin课堂 :扩展函数和运算符重载
5.6 kotlin课堂 :扩展函数和运算符重载5.6.1扩展函数拓展函数 : 表示即使在不修改某个类的源代码的情况下,仍然可以打开这个类,向该类中添加新函数。拓展函数的语法结构:fun ClassName.methodName(param1 :Int,param2 :Int):Int{ return 0 }示例代码:/** * 将letterCount()方法定义成Strin...
2020-04-17 20:54:05
180
1
原创 第一行代码-第三版 第五章 Fragment
Fragment 用于兼顾手机平板5.1 Fragment是什么Fragment是一种可以嵌入在Activity当中的UI片段作用:让程序更加合理和充分地利用大屏幕的空间。5.2Fragment的使用方式先书写fragment的布局文件建立对应的类,并让他继承自Fragment(注意:此处需要选择AndroidX库中的Fragment)需要重写Fragment中的onCreateV...
2020-04-16 22:58:40
408
原创 第一行代码-第三版4.8 kotlin课堂:延迟初始化和密封类
4.8 kotlin课堂 :延迟初始化和密封类4.8.1 对变量延迟初始化要解决的问题:全局变量的判空,在确保不为空的情况下,kotlin仍然可能需要你对这个变量进行判空操作。解决问题的方法:对全局变量进行延迟初始化延迟初始化使用的关键字是lateinit只能用于var声明的值,毕竟是对变量进行延迟初始化。存在未初始化就直接使用的风险,这样的情况会抛出UninitializedProp...
2020-04-16 21:28:07
280
原创 第一行代码(第2版):菜鸡踩坑系列----14.5显示天气信息
第一行代码 14.5显示天气信息在最后一部分的代码中,直接运行始终是不成功的。报错信息是:出现了空指针异常的现象,其原因是findViewById这个方法返回的是null这是我通过调试知道的。java.lang.RuntimeException: Unable to start activity ComponentInfo{com.coolweather.android/com.coolw...
2020-03-14 11:19:54
753
原创 第一行代码(第2版):菜鸡踩坑系列----14.4遍历省市县三级列表的功能
第一行代码 14.4遍历省市县三级列表的功能终于成功实现了这个功能,相当的开心。在这里弄了很久,因为始终无法实现是三个页面的成功展示。问题应该在我,搬抄代码时存在一些小问题。需要注意一点: 如果直接访问网址会出现加载失败的提示。具体原因不清楚,应该是android为了使用户更加安全,我们需要在配置文件中添加一行 android:usesCleartextTraffic="tru...
2020-02-02 10:19:54
495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人