自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 资源 (2)
  • 收藏
  • 关注

原创 Kotlin 知识点总结 类与对象

Kotlin 类与对象1、构造函数1、构造函数在 Kotlin 中的一个类可以有一个主构造函数以及一个或多个次构造函数。主构造函数写在类名后面class Student constructor(name: String){ }如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字。class Student(name: String){ }不能省略情况,例如:class Student private constructor(name: String

2021-08-02 10:21:29 55

原创 Android usb通信 实现app与arduino通信demo

Android usb通信一、前言二、开始1、AndroidManifest.xml清单文件2、创建权限广播接收者3、枚举usb设备4、获取usb接口以及输入/输出端点一、前言最近在学习android的usb开发,写了一个android手机和arduino开发板通信的Demo。和其他开发板或设备进行usb通信,原理都是一样的。写篇博客记录一下。按照惯例,先看效果图:最后一张图是我用到的arduino设备和用于连接手机的数据线,需要一个usb转tc的转接头才能插到手机上二、开始1、Androi

2021-02-19 20:53:34 2000 20

原创 Android 蓝牙串口通信Demo

目录一、前言二、效果图三、源码(带注释)1、布局代码2、Java代码3、权限声明四、注意一、前言在学校和机电的同学组队准备做一个智能小车去参加比赛,需要我开发一个小车的控制app,所以我开始学习蓝牙串口通信的相关知识。在看了别人的博客之后,我写了一个蓝牙串口通信的Demo。但由于我没有那些硬件,所以只能在笔记本上下载串口调试工具,然后和手机蓝牙配对来进行通信测试,测试没有问题,用于小车蓝牙模块的通讯估计也是没有问题的。关于如何设置笔记本电脑的蓝牙 串口并且和手机蓝牙配对,以及pc串口调试工具的下载请

2021-01-25 16:10:34 4991 17

原创 安装apk时发生的错误处理:Failure [INSTALL_FAILED_INVALID_APK] [INSTALL_FAILED_TEST_ONLY]

安装apk时发生错误:Failure [INSTALL_FAILED_INVALID_APK]解决:给AndroidManifest.xml文件中的< application />标签添加这个属性:android:extractNativeLibs=“true”

2022-01-25 16:53:55 2694

原创 Java 单链表的实现与反转

package test;import java.util.Iterator;public class LinkList<T> implements Iterable<T>{ // 头节点 private Node head; // 记录链表长度 private int N; public LinkList(){ // 初始化头节点 head = new Node(null, null); N = 0; } // 清空链表 public v

2021-10-28 20:22:20 119

原创 Android Bitmap相关知识点——类型、创建、压缩、转换等

Bitmap1、Bitmap的各种类型1、Bitmap的各种类型当需要做性能优化或者防止OOM时,我们通常会使用RGB_565这种类型。因为ALPHA_8类型的bitmap只有透明度,用处不多。ARGB_4444显示图片不清晰。ARGB_8888占用内存空间最多。BItmap类型一个像素所占内存ALPHA_81字节 【8位( A:8)】RGB_5652字节 【16位(R:5;G:6;B:5)】ARGB_44442字节【16位( A:4;R:4;G:4;B:4)】

2021-10-20 18:21:54 1088

原创 我的第二个app——图片压缩器,已上架

图片压缩器app这是我第二个上架应用市场的app,这个app的主要功能就是实现图片的压缩处理、格式转换以及图片裁剪。功能逻辑不复杂,技术点主要是android的文件读写操作,bitmap相关api的使用,以及android自带的裁剪功能的调用。android自带的裁剪功能比较薄弱,甚至说是不好用。我准备在下次更新中,使用第三方库来重选实现裁剪功能,或者也可用自定义View来实现,但就相对复杂一点。UI的设计上参考了同类型的app,应该不算难看吧(程序员审美)。app下载地址:https://appg

2021-10-09 09:01:02 36

原创 我开发的app——图片取色工具 成功上架应用市场

图片取色工具这是我花了两周左右的时间开发的一个简单工具类app,使用kotlin语言编写。主要功能就是获取一张图片上的颜色。这是我第一个上架的app,虽然十分简单,没什么技术含量。但上架了华为应用市场我还是很开心的,有点小成就感。因为我申请的软著还没到,所以只上架了华为应用市场。上架的时候被驳回了三四次,但按照审核要求一步步修改,最终还是成功上架了。应用下载链接:https://appgallery.huawei.com/app/C104689007接下来我准备开发另一个app,也是一个小工具,叫

2021-09-07 09:22:57 240

原创 CSS 知识点总结(五)CSS浮动

CSS浮动浮动案例清除浮动额外标签法overflow 清除浮动伪元素法双伪元素法浮动<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width

2021-09-03 09:55:55 30

原创 CSS 知识点总结(四)CSS定位

CSS定位1、固定定位2、绝对定位3、相对定位4、粘性定位1、固定定位<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initi

2021-09-03 09:45:39 34

原创 CSS 知识点总结(三)

CSS 知识点总结1、CSS 复合选择器2、CSS 伪类选择器3、CSS 显示模式转换1、CSS 复合选择器<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=

2021-09-03 09:35:03 18

原创 CSS 知识点总结(二) 盒子模型

CSS 盒子模型1、边框2、内边距3、外边距1、边框<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=

2021-09-03 09:27:17 37

原创 CSS 知识点总结 (一)

CSS 知识点总结 {一}1、CSS 文本属性2、CSS 选择器3、CSS 背景图片4、CSS 阴影5、 CSS 圆角边框1、CSS 文本属性<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport

2021-09-03 09:17:59 19

原创 HTML 列表标签、表格标签、表单标签

HTML 列表标签、表格标签、表单标签一、列表标签二、表格标签三、表单标签四、综合练习一、列表标签<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device

2021-08-30 11:32:50 45

原创 Kotilin 协程 学习笔记

Kotlin 协程协程基于线程,是轻量级的线程。协程可以让异步逻辑的代码同步化。使用kotlin协程需要添加依赖库:implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2'第二个依赖是在Android项目中才会用到。最简单方式创建协程:GlobalScope.launch

2021-08-03 17:28:37 119 1

原创 Kotlin 高阶函数简介

Kotlin 高阶函数如果一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,那么该函数就是高阶函数。例如:fun seniorFun(param: String,func: (String,Int) -> Unit){ func("hello",123)}函数类型Kotlin除了整型、布尔型、等类型外还增加了一个函数类型。函数类型的语法规则类似这样:(String,Int)-> Unit-> 左边括号内就是该函数的所有参数类型,->右边就是该函数

2021-08-02 17:17:09 45

原创 Android 网络请求与JSON数据解析

网络请求与JSON数据解析1、前言2、开始2.1 使用HttpURLConnection网络请求、使用JSONObject数据解析2.2 使用Okhttp网络请求、使用GSON数据解析1、前言本文分别介绍使用HttpURLConnection和OkHttp进行简单的网络请求,同时介绍如何进行JSON格式数据的解析。首先既然要发送网络请求获取JSON数据,就得有服务器提供的接口地址,这里采用一个最简单的方式来搭建服务器。开启你的Tomcat服务器,然后找到存放tomcat的文件夹,在webapps文件

2021-07-26 14:50:53 860

原创 Android WebView控件的简单使用

WebViewWebView控件是用来显示网页的声明网络权限<uses-permission android:name="android.permission.INTERNET" />布局<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/a

2021-07-26 13:35:38 147

原创 Java排序算法:快速排序

Java快速排序原理:在待排序数组中选定一个分界值(取第一个),基于分界值将数组切分成两部分。将数组中大于分界值的元素全部放到右边,小于分界值的元素全部放到左边,这样左边所有的元素都小于右边的元素。对左右两边的元素进行排序,一样的,在左边的部分中选取一个分界值(取第一个),基于该分界值继续将左边部分的所有元素切分成两部分。第一次切分得到的右边部分同样进行切分操作。递归执行以上的操作直到不需要切分为止,经过以上的操作,最后的数组就是排好序的了。切分的具体实现逻辑:1、找一个分界值(取第一个),用两

2021-06-03 22:25:40 33

原创 Java 排序算法:希尔排序 详细解析

Java希尔排序原理:希尔排序是插入排序的改进版本。希尔排序将数组数据进行分组。如何分组?首先,确定一个增长量h,基于增长量对数据进行分组。例如,当增长量h = 3时,数组中下标为0、3、6、9… 的元素为一组,下标为1、4、7、10… 的元素为一组,依此类推。然后对每一组都进行插入排序。这样就算是完成了一趟排序,之后对增长量h进行减少(规则是 h = h/2 ),然后继续基于当前的增长量h进行分组,分完组继续进行插入排序。重复以上的操作直到增长量小于1就停止,排序完成。最开始的增长量h如何确

2021-06-02 18:10:33 339

原创 Java排序算法: 插入排序

java 插入排序排序原理:将待排序数组分成已排序部分和未排序部分,将未排序部分的第一个值插入到已排序部分中。倒序遍历已排序部分并与待插入的值进行比较,若大于待插入的值,则进行位置交换,直到碰见小于待插入的值就停止遍历。图片来源黑马程序员代码实现:插入排序类:package com.example.algorithmdemo.sortingAlgorithm;/** * 插入排序 */public class Insertion { //排序方法 public stat

2021-06-01 11:19:45 32 1

原创 Android 对接OneNet Mqtt服务Demo

Android MQTT一、开通OneNet Mqtt二、开始编程1、添加依赖、声明权限2、MainActivity.java全部代码一、开通OneNet Mqtt官网:https://open.iot.10086.cn/在控制台首页选择多协议接入,然后添加产品,设备接入协议选择MQTT,再然后创建设备,查看设备详情。产品ID、设备ID、鉴权信息等下会用到二、开始编程1、添加依赖、声明权限创建一个新android项目,添加以下依赖,声明权限 implementation 'or

2021-05-21 10:58:59 1543 4

原创 Java排序算法:选择排序

选择排序选择排序就是在每一次遍历过程中将数组中值最小的排到当前的第一位。总共需要(数组长度-1)次遍历,在每次遍历中假定第一位索引的值为最小值,然后与下一个值对比,如果最小索引所在值大于其他值就将小的那一个索引当作最小值索引,接着继续对比最小索引所在值与下一个索引的值,重复此操作,最终就会在此次遍历中得到最小值及其索引,将最小值与第一位的值进行交换,这样就将最小值放到了数组开头,完成本次遍历。选择排序的时间复杂度为O(N^2)图片来源黑马教程代码实现:package com.example.a

2021-04-26 09:43:44 58

原创 Java 设计模式(三)命令模式

命令模式定义:将请求封装成对象,这可以让你使用不同的请求、队列、或者日志来参数化其他对象。何时使用命令模式?当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式。在被解耦的两者之间是通过命令对象进行沟通的。命令对象封装了接收者和一个或一组动作。调用者通过调用命令对象的execute()方法发出请求,这会使接收者的动作被调用。调用者可以接收命令当作参数,甚至在运行时动态地进行。优点: 1、降低了系统耦合度。 2、新的命令可以很容易添加到系统中去。缺点:使用命令模式可能会导致某些系统有过

2021-04-25 10:49:22 48

原创 java排序算法:冒泡排序

冒泡排序冒泡排序是排序算法的一种,就像它的名字一样,排序的方式就是数组中的元素通过比较,大的元素一级一级的往后冒,原理比较容易理解,但代码实现就没那么简单。我们需要先搞清楚要怎么比较,需要比较多少次。首先,通过分析可以知道每个元素都与相邻元素比较一次,如果前一个元素比后一个元素大就交换位置,这样一趟下来数组还没有完全排序,只是把数组中最大的值排到了最后面。所以我们需要多趟比较才能将整个数组排序。那比较的趟数是 多少呢,其实我们按这个排序方法先模拟一下就知道,比较趟数都是(数组长度-1)。然后由于每一趟

2021-04-23 11:28:44 45

原创 java Comparable接口的使用,对象间的比较

Comparable接口java提供了一个Comparable接口用来定义比较规则,可实现对象间的比较。如果你有这样的一个需求,让实体类的两个实例依据类中某一字段的值进行比较或者排序,那么你就可以使用Comparable接口来解决。让要进行比较的类实现Comparable接口,复写compareTo(object o)方法,在该方法中编写比较方式的具体逻辑。小案例需求:对两个Student类对象的年龄age进行比较,获取年龄较大的Student对象。1、创建Student实体类package

2021-04-22 10:50:18 494

原创 Java 设计模式(二)单例模式

单例模式定义:确保一个类只有一个实例,并提供一个全局访问点。实现:经典写法package com.example.designpatternsdemo.singletonPattern;public class Singleton { //静态私有的Singleton类唯一实例 private static Singleton uniqueInstance; //私有化构造方法 private Singleton(){ } //静态getInstance(

2021-04-20 20:57:12 23

原创 Java 设计模式(一)简单工厂模式

工厂方法模式什么是工厂方法模式:工厂方法模式是一种用于创建对象的模式,应用在有超类和多个子类的情况(超类可以是接口、抽象类、父类)。该模式将具体类的实例化工作移动到工厂类中,将类的实例化封装起来。工厂类中负责实例化并返回对象的方法称为工厂方法。工厂类可以是单例的,工厂方法可以是静态的。实现案例:首先创建一系列产品类实体类接口Penpackage com.example.designpatternsdemo.FactoryPattern;public interface Pen {

2021-04-19 12:05:11 51

原创 Android Jetpack WorkManager的基本用法

WorkManager的基本用法添加依赖: def work_version = "2.5.0" implementation "androidx.work:work-runtime:$work_version"定义一个后台任务:package com.example.workmanagerdemoimport android.content.Contextimport androidx.work.Workerimport androidx.work.WorkerParameters

2021-04-16 13:48:42 56

原创 Android Jetpack 使用Room增删改查

Room增删改查一、Room简介二、使用1、添加依赖2、创建数据实体类3、创建Dao接口层4、创建RoomDatabase扩展类5、执行增删改查一、Room简介Room是Jetpack库中的一部分,它是官方为了开发者更好的使用android数据库功能而推出的ORM框架。什么是ORM?ORM(Object Relational Mapping) 对象关系映射由于我们使用的编程语音是面向对象语言,而使用的数据库是关系型数据库,所以需要在面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是ORM

2021-04-15 13:14:20 516

原创 Android SQLite数据库使用

Android SQLlite数据库SQLlite数据库增删改查创建一个帮助类继承自SQLiteOpenHelper类在该类中定义创建表的sql语句,在onCreate()中调用SQLiteDatabase对象的execSQL()方法执行该语句package com.example.sqllitedemoimport android.content.Contextimport android.database.sqlite.SQLiteDatabaseimport android.datab

2021-04-13 19:25:56 54

原创 Android Navigation与BottomNavigationView实现底部导航栏

底部导航栏一、效果图二、实现1、创建Fragment以及布局文件2、添加FragmentContainerView和BottomNavigationView两个控件3、配置xml资源文件4、给BottomNavigationView配置NavController一、效果图使用jetpack的Navigation导航组件和控件BottomNavigationView结合实现app底部导航栏的效果:二、实现1、创建Fragment以及布局文件首先创建四个Fragment,以及对应的布局文件,frag

2021-04-12 13:26:29 1396 1

原创 Android Jetpack 导航组件Navigation使用入门

jetpack Navigation一、简介二、开始使用1、添加依赖:2、创建Fragment3、创建导航图4、执行跳转操作5、传参一、简介导航组件Navigation用于实现应用中的导航操作。。。(感觉说了一句废话)Navigation由三个关键部分组成:导航图,NavHost,NavController导航图: 导航图xml资源文件包含了导航相关的所有信息,包括导航目的地(指activity或fragment内容区域),以及操作(目的地之间的逻辑连接);NavHost: 用于显示导航目标的容

2021-04-11 19:24:46 338

原创 Android RecyclerView使用总结(Kotlin)

RecyclerView使用总结(Kotlin)一、前言二、开始1、布局文件2、初始化用到的数据3、recyclerView设置布局管理器4、适配器5、设置点击事件6、下拉刷新,上拉加载更多7、拖拽移动、滑动删除8、适配器完整代码9、含多种item布局的recyclerView三、结尾一、前言最近在学kotlin语言,所以写了这个Demo来练手,顺便复习一下RecyclerView的使用。Demo效果图:二、开始1、布局文件这是Demo的主布局文件,由于使用到一个下拉刷新,上拉加载的开源框

2021-03-31 22:07:34 1103

原创 Kotlin 关键字lateinit 变量延迟初始化

kotlin lateinit 延迟初始化先看一段简单代码:class Test : AppCompatActivity(), View.OnClickListener { private var list: ArrayList<String>? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) set

2021-03-27 11:17:32 261

原创 Android Bmob后端云简单使用-增删改查

Bmob后端云一、增二、删三、改四、查记录一下bmob后端云数据库在android上的简单使用官方文档:http://doc.bmob.cn/data/android/先在bmob官网创建一个表用于增删改查字段 name age sex创建android项目,声明权限:<!--允许联网 --> <uses-permission android:name="android.permission.INTERNET" /> <!--获取GSM(2g)、

2021-03-24 12:33:04 676

原创 Android Socket通信Demo 实现同一网络下手机互发数据

Android Socket通信Demo一、Demo简介二、服务器线程三、客户端线程四、发送数据五、Demo全部代码1、MainActivity.java代码2、布局代码一、Demo简介我的这个Demo通过socket实现了同一局域网内的两部手机互发数据。首先,要通信,就得让一台手机成为服务器,其他手机设备就是客户端了。创建两个线程,一个服务器线程,一个客户端线程。想让当前手机成为服务器就开启服务器线程。作为服务器的设备先开启线程。效果图:有个问题就是我在测试的时候,用的是一个模拟器和一

2021-03-05 14:44:40 620

原创 Android Jetpack 之 lifecycle入门,简单使用及分析

Lifecycle入门一、Lifecycle简介二、简单使用三、简单分析一、Lifecycle简介Lifecycle是Jetpack架构组件之一,是一个生命周期感知型组件。作用就是使一个组件可以感知到另一个组件(如 Activity 和 Fragment)的生命周期状态的变化。在未使用生命周期感知型组件时,有一种常见模式,就是在生命周期方法中对依赖组件进行操作,例如,在Activity OnCreate()时调用组件内部的start()方法开启组件的功能,在Activity OnDestroy()时

2021-03-02 19:55:59 179

原创 Android自定义View——带删除功能的EditText

自定义EditText自定义View练习,用Kotlin实现一个带删除功能的EditText。实现代码:自定义属性:只有一个自定义属性,用于设置删除按钮的图标<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="EditTextWithClear"> <attr name="clearIcon" format="reference"/

2021-01-28 16:14:40 208

原创 pc串口调试工具与安卓app通讯,pc及手机串口配对方法

一、pc串口调试工具串口调试工具下载地址:https://www.onlinedown.net/soft/261875.htm二、笔记本电脑蓝牙设置1、进入蓝牙页面,开启蓝牙2、往下拉,找到 “更多蓝牙选项” 并点击进入3、勾选 ✔“允许蓝牙设备查找这台电脑”4、来到第二个选项卡,点击 “添加”5、选择 “传入(设备启动连接)”,然后确定6、此时会多出一个端口(我这里是COM6)7、然后找到 “设备管理器” 页面8、在这里你会看到你刚才创建的COM端口9、右击该端口,属

2021-01-25 16:00:50 2779

蓝牙串口通信工具Demo.zip

用java写的蓝牙串口通信app,里面有源码+apk,可以实现和pc串口调试工具互传数据

2021-01-25

popupWindow使用Demo

使用popupWindow实现类似微信点击右上角加号弹出添加好友的列表,还有在底部弹出的popupWindow

2021-01-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除