自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(117)
  • 资源 (7)
  • 收藏
  • 关注

原创 小程序蓝牙传输二维码

有个需求:蓝牙要显示二维码,需要得到二维码的位图(点阵图、矩阵图)。实现思路:1.获得canvas的二维码图片,要求为64px乘64px2.获得二维码的图片,然后解析像素数组,获得像素的二进制状态码3.将二进制状态码转化为byte数组,然后发送给蓝牙。这里强调一点,draw方法和canvasGetImageData都是异步加载,需要通过promise来做等待处理。首先,按照网上通用的二维码生成代码实现获得二维码矩,使用qrcode.js来获得。核心代码为draw方法:.

2020-08-03 23:54:57 972 1

原创 Android png图片彩色转黑白,透明度打印变黑色的解决方法

最近客户有个需求:需要将彩色的图片转成黑白图片用pos机的打印机打印出来。这个在实现的过程中发现个问题:从网上下载png图片,保存到本地发现透明背景变成了黑色。正确的:本地下载的:因为第一次遇到这种情况,导致搞到现在。不过总归水落石出了,我佛了。原因是下载图片将bitmap保存到本地的时候,对图片的保真度做了限制:public enum CompressFormat { JPEG (0), PNG (1), WE

2020-07-29 00:28:07 1811

原创 微信小程序实现GBK和UTF-8互转

js虽然有第三方支持的GBK工具,但是小程序没有;而我开发中又需要进行格式的转化,就依据前人的经验做了一份出来。分为两部分:Decode.js和Encode.js。分别是GBK格式的二进制文件转化为UTF-8的String和反转。import Encoder from "./encode/Encoder";import Decoder from "./encode/Decoder";//实现参考例子var message = "减肥是一件困难的事情";//UTF-8转GBKvar g

2020-07-21 22:41:44 4238 10

原创 微信小程序的setBLEMTU说明

最近在做微信小程序的蓝牙功能,连接的设备是MPOS,但是收发数据发现,如果手机端接收的数据超过20byte就无法有效收到。查询了很多资料,也尝试了抓报蓝牙的btsnoop_hci.log来进行分析,发现并没有收到notify的数据,说明手机端没有收到。网上大多数的结论是:BLE做了收发的data最大数据限制,单个数据包的默认系统最大长度是23byte(字节),超过了就会出问题【20byte的Data数据 + 3byte的蓝牙 Header】。之前微信也没有做相关的处理,其实Android本身如果做B

2020-07-02 10:44:00 6108 7

原创 Socket丢包解决对策

socket使用过程中遇到个问题:因为数据量太大,大约有2w个字节的响应数据报,之前同事代码实现的时候没有做完整的接收处理。仅使用InputStream.available()做了一次读取,然后就遇到问题了!会发现,每次读取的时候获得的长度值不固定,且均无法获得完整长度。另一方面,响应的数据报并不会告知发送的长度是多少,但是有结束标志:byte类型03是结束标志。所以做了重新:by...

2020-04-15 20:29:59 5027

原创 子线程居然可以更新UI!

一、子线程更新了UI发现了一个奇怪的情况,我在fragment初始化的时候,new了一个子线程。然后在子线程设置了一个textView的字符串,并且设置了ta的click监听事件@Override protected void init() { LogUtils.dThread("<<<<<init>>>>&g...

2020-03-24 15:38:41 514

原创 Jetpack之Navigation的学习demo

1.java版demohttps://github.com/fengjw1/NavigationDemoOfJava

2020-03-22 20:41:44 339

原创 MQTT源码解析

一、MQTT的创建和connect流程1.Android端实现mqtt,首先会new一个MqttAndroidClient,并传入需要的参数。首先,MqttAndroidClient是如何创建的呢?public MqttAndroidClient(Context context, String serverURI, String clientId, MqttClientPers...

2020-03-20 11:10:59 2058

原创 mqtt开发总结

博客推荐https://juejin.im/post/5cd66c4af265da037516bec3

2020-03-19 09:52:44 1326 3

原创 getLocationOnScreen和getLocationInWindow的区别

测试发现,大多数布局情况下,两者获得的内容是没有区别的,唯一的区别就是在window的弹框(比如dialog等)出现的情况下。其他情况下,获得的都是getLocationOnScreen的值。两者并没有区别。参考博客:https://blog.csdn.net/tmj2014/article/details/53283804...

2019-12-24 18:12:28 517

原创 viewHolder的作用

viewholder的作用是因为Android有个recycler的反复循环器,viewholder就是借助他来做到循环利用itemview。例如:默认加载10个itemview,初始化的时候创建一个viewholder,并把10个itemview加载到内存里面。接着下滑,加载5-15的item,这个时候,显示的还是只有10个view。我们只是需要重新填充view的数据,而不需要再...

2019-12-24 15:56:47 8460

原创 passcodeview的简单使用

最近做一个密码键盘,使用了GitHub的开源库,仓库地址为:https://github.com/kevalpatel2106/PasscodeView做一个类似界面,如图:passcodeview的简单使用:git clone项目到本地,查看simple demo。passcodeview支持两种:按键和画线,demo里面都有详细例子。我这里只使用了按键的部分,并且不需要指纹...

2019-12-24 14:29:37 242

原创 static和volatile的使用

1.static保证唯一性,就是在主内存中是唯一的变量。2.volatile是保证可见性,就是指在工作线程和主内存的数据的一致性,改变了工作线程中volatile修饰的变量,那么主内存也要发生更新。所以,volatile和static一起使用不矛盾。因为static修饰只能保证在主内存的唯一性,如果涉及到其他工作线程,改变参数可能就会导致static修饰的变量的内容无法同步,所以stati...

2019-12-24 11:35:09 9613 2

原创 使用GreenDao的记录(二)

GreenDao主要是考虑四个对象:DaoMaster,DaoSession,DBHelper和DBManager。1.DaoMaster主要是注册表2.DaoSession主要是做数据库的增删改查的映射,DaoSession的初始化及使用都是依赖DaoMaster。3.DBHelper作为初始化数据库的时候使用4.DBManager作为我们的主要操作类来编码。DBMan...

2019-12-24 10:11:36 162

原创 使用GreenDao数据库的记录

1.List<T>自定义数据的增加方法:写一个convert转化器,然后用FastJson的格式转化方法来处理转化问题例如:数据库的一个自定义List,叫priceArray.然后就进行转化:public static class PriceArrayBeanConvert implements PropertyConverter<List<P...

2019-12-23 16:48:27 168

原创 抽象类中的非抽象方法

抽象类的作用相当于模板其内部可以有抽象方法和非抽象方法:其中抽象方法必须被继承该抽象类的子类重写;而非抽象方法则不需要。那么,非抽象方法的目的是什么呢?重复利用。当多个子类继承同一个抽象类的时候,有些共同的属性,不需要子类特别实现的可以定义为同一个非抽象方法,使用的时候子类直接调用即可。比如抽象父类内部有个单例的非静态的非抽象方法c,有A,B两个子类都继承该类,则A和B...

2019-12-11 14:56:16 4983 1

原创 Mqtt断开连接disconnect报错原因

最近在用mqtt做及时通信,mqtt服务本身是放在本地的service服务里面运行,在应用关闭的时候,mqtt服务也要断开连接,不然会继续占用服务器的cpu,增加服务器负担。所以,在service的onDestroy中,需要调用MqttAndroidClient.disconnect()方法,但是会出现如下报错Log:Service org.eclipse.paho.android.serv...

2019-12-11 11:52:18 17034 2

原创 Android接口回调

Android自定义的接口回调主要逻辑如下:1.定义接口。例如:class interface IListener{ /** *成功状态 **/ void onSuccess(); /** *失败状态 **/ void onError();}2.设置回调的位置例如:我们在一个方法下面回调结果...

2019-12-11 08:49:32 254

原创 List数组删除数据时候的注意到

List数组在进行删除操作的时候,调用remove方法,但是remove之后会导致数据大小减1。如果我们使用for循环历遍,会存在一个问题,remove之后导致后一位因为前移而无法被历遍。所以,在进行remove的时候,不要使用for循环,使用寄存器历遍才行:代码逻辑如下://删除空数据串 Iterator<BaseBean> iterator =...

2019-12-04 21:19:41 422

原创 javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx.app.xxx.com not verified:

最近遇到Hostname报错问题,使用的sslSocketFactory是网上的常规版本,所以写法是正确的。而这个问题的原因是服务器的host和本地的域名不匹配,我们看一下CA证书,例如baidu.com的证书:主要看使用者的CN和SAN的DNS是否有问题。在使用者可选名称中,一定要包含CN的域名,否则会报错,报错内容如同标题。具体原理可以参考博文:https://...

2019-12-03 12:38:11 7785

原创 Android事件分发机制

一、什么是Android事件分发机制Android事件分发机制是Android最基本的机制之一,不论是按键的事件,还是消息的事件,在Android的系统运行中,事件的分发均采用同一种思想来实现。我们这里通过分析android的按键事件分发来理解。 1.Android View的树形结构我们日常处理的部分为RootView下面的ViewGroup和View部分,那么上面的Ph...

2018-12-10 14:50:11 247

原创 ProcessList.java文件解读

package com.android.server.am;import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM;import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME;import jav...

2018-10-22 22:27:02 1436

原创 android进程生命周期和ADJ

一、进程生命周期在回收资源的时候,系统会根据进程的重要性来从低到高的回收,划分为5个级别:1.前台进程(Foreground process)2.可见进程(visible process)3.服务进程(Service process)4.后台进程(Background process)5.空进程(Empty process)重要性依次递减1.1 Foreground process...

2018-10-19 16:03:22 1071

原创 GSON格式插件:GsonFormat

 一、PostmanPostman是接口测试工具,基于Chrome的插件(自备梯子)。该工具可以获取服务器的数据,发送数据到服务器获取返回结果等操作。该工具使用教程请查看文档。 我们将Postman获得的json数据通过GsonFormat工具来解析,形成Gson的数据格式类。 二、GsonFormat的安装使用 1.安装(搜索GSON就有了) ...

2018-10-18 11:05:55 582

原创 RelativeLayout属性详解

官网地址 第一类属性 属性值为true或者falseandroid:layout_centerHrizontal 水平居中android:layout_centerVertical 垂直居中android:layout_centerInparent 相对于父控件完全居中android:layout_alignParentBottom 贴紧父控件的下边缘android:l...

2018-10-18 10:33:14 42560

原创 MB/s、Mb/s、Mbps区别

1Kb = 1024bit1KB = 1024Byte1Mb = 1024Kb1MB = 1024KB 1Byte = 8 bit1MB = 8 Mb1Mb = 0.125MB 【本质:都是1Byte = 8 bit的换算】 所以换算的时候只需要知道:1MB/s = 8Mb/s = 1024KB/s...

2018-10-17 09:51:15 5670

原创 多线程之Thread、Runnable、Callable、Future、FutureTask

 一、知识基础:1.Thread、Runnable、Callable:都是线程2.Thread特点:提供了线程等待(wait)、线程睡眠(sleep)、线程礼让(yield)等操作。3.Runnable和Callable特点:都是接口,并提供对应的实现方法。4.Runnable和Callable的区别:Runnable无返回值,Callable有返回值。5.Future:提...

2018-10-17 09:29:04 939

原创 descendantFocusability用法

这个属性主要是为了解决焦点问题。两种情况:1.ListView的item有Button时,点击item无响应。2.在ScrollView时,里面包裹的内容超过了屏幕的长度,当进去scrollView直接自动滑动到最底部。 这两个问题都可以通过android:descendantFocusability属性做到。该属性在view获得焦点时,定义ViewGroup和其子控件两者之间...

2018-10-16 19:24:23 3882

原创 Git原理笔记(一)

VCS: version control system参考文档 一、底层命令(Plumbing)和高层命令(Procelain)高层命令即我们常用的那些git命令。除去这些命令,以UNIX风格使用或者由脚本调用的命令,一般称为底层命令。 我们这里主要学习底层命令。当你在一个新目录或者已经建立了git的项目内执行git init的时候,都会创建一个.git目录。几乎所...

2018-10-15 21:53:12 358

原创 Git分支相关命令

将本地分支提交到远端命令:git push origin [name]切换分支命令: git checkout [name]删除本地分支命令:git branch -d [name] 【强制删除使用大写字母D】删除远端分支命令:git push origin :branch-name或者 : git branch -r -d origin/branch-name或者 : git...

2018-10-10 14:08:42 775

原创 网络测速全解析之一:自定义View基础知识(九)

一、MotionEvent讲解:单点触控:事件 简介 ACTION_DOWN 手指 初次接触到屏幕 时触发。 ACTION_MOVE 手指 在屏幕上滑动 时触发,会多次触发。 ACTION_UP 手指 离开屏幕 时触发。 ACTION_CANCEL 事件 被上层拦截 时触发。 ACTION_OUTSIDE 手指 不在控件区域 时触发。...

2018-08-31 09:47:14 584

原创 网络测速全解析之一:自定义View基础知识(八)

一、事件分发机制详解:大佬名言:所有的源码都是为了适应具体的应用场景而写的,只要能够理解运用场景,理解源码也就十分简单了。核心问题是:正确理解在实际场景中事件分发机制的作用。 常见事件事件 简介 ACTION_DOWN 手指 初次接触到屏幕 时触发。 ACTION_MOVE 手指 在屏幕上滑动 时触发,会会多次触发。 ACTION_UP 手指...

2018-08-30 17:28:49 220

原创 网络测速全解析之一:自定义View基础知识(七)

一、自定义View的事件分发机制:1.事件分发机制的意义:view是树形结构的,而且view会重叠到一起,当我们点击某个view的时候,他可能有多个层次的view都响应。如何处理这些响应,而让我们可以更好的选择,所以有v事件的分发机制。制定一种规则来解决这些问题,让事件可以有顺序的执行起来。                                              ...

2018-08-30 15:01:15 192

原创 网络测速全解析之一:自定义View基础知识(六)

一、PathMeasure讲解:PathMeasure是一个用来测量Path的类,主要方法如下构造方法方法名 释义 PathMeasure() 创建一个空的PathMeasure PathMeasure(Path path, boolean forceClosed) 创建 PathMeasure 并关联一个指定的Path(Path需要已经创建完成)。 公共...

2018-08-30 11:23:20 176

原创 网络测速全解析之一:自定义View基础知识(五)

常用速查表:作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之间的直线到Path 闭合路径 close 连接第一个点连接到最后一个点,形成...

2018-08-29 22:49:44 213

原创 网络测速全解析之一:自定义View基础知识(四)

一、Path之贝塞尔曲线(非常重要~)常用速查表:为了兼容性(偷懒) 本表格中去除了在API21(即安卓版本5.0)以上才添加的方法。忍不住吐槽一下,为啥看起来有些顺手就能写的重载方法要等到API21才添加上啊。宝宝此刻内心也是崩溃的。作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint ...

2018-08-29 21:51:36 194

原创 网络测速全解析之一:自定义View基础知识(三)

一、Path的基本操作速查表~作用 相关方法 备注 移动起点 moveTo 移动下一次操作的起点位置 设置终点 setLastPoint 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 连接直线 lineTo 添加上一个点到当前点之间的直线到Path 闭合路径 close 连接第一个点...

2018-08-29 20:43:32 193

原创 网络测速全解析之一:自定义View基础知识(二)

一、Canvas 画布操作:画布操作的意义在于帮忙我们用更容易理解的方式做出想要的效果。(所有的画布操作都只影响后续的绘制,对之前的绘制内容没有影响)1.画布操作(1)位移(translate)translate是平移操作,基于当前点的平移一段距离;而不是基于(0,0)圆点的平移。(移动是可叠加的~)(2)缩放(scale)sx、sy是缩放比例,而px和py是控...

2018-08-29 16:55:41 176

原创 网络测速全解析之一:自定义View基础知识(一)

效果如图:整个项目的Github地址一、基础知识:基础知识,也就是最基本的自定义view需要掌握的知识,我这里主要是学习了GcsSloop大佬的view自定义系列博客(这里是博客地址)1.自定义view绘制流程调用链2.android自定义坐标系(向右向下为正)所以屏幕显示部分坐标系如下:子控件和父控件的关系:MotionEvent中:get...

2018-08-27 22:53:24 440

原创 Android源码 更改系统音量

一、Android音量按键的传递流程:android的音量按键属于系统级的按键响应,起始位置位于PhoneWindow.java的按键监听位置,如下图:KEYCODE_VOLUME_UP,KEYCODE_VOLUME_DOWN和LEYCODE_VOLUME_MUTE分别为音量+、音量-和静音;direction是一个标志位,调整的方向和类型。设置好direction之后会调用M...

2018-08-13 11:47:33 6241

Dom方式解析XML

该Demo是通过Dom方式来解析xml,运行环境为androidStudio。

2017-10-19

动态添加布局文件的demo

动态添加layout的实现,可以 下下来看一下,很简单的小demo

2015-06-08

聊天功能实现的demo

聊天对话框的实现,喜欢的可以下下来看看,很简单的一个小demo

2015-06-08

jdbc代码手册.pdf

jdbc代码手册.pdf 链接数据库用的嘛

2015-03-02

MySQL5.1参考手册官方简体中文版.chm

MySQL5.1参考手册官方简体中文版.chm

2015-03-02

hibernate-validator-5.1.2.final-dist.zip

hibernate的一些包和API

2014-10-15

MySql入门教程

MySql入门教程

2014-05-08

空空如也

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

TA关注的人

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