自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王明海的专栏

HI,一起出来玩吧!

  • 博客(120)
  • 资源 (1)
  • 收藏
  • 关注

原创 RadioButton多行显示

日常使用单行的时候都是以列表的形式,如横向或者竖向,而一但需要多行显示的时候就不行了,如下面的效果图:实现这样的效果图有以下几种思路:使用RadioGroup竖向布局。中间嵌套LinearLayout来使用。但是这样RadioGroup会失去单选的功能,因为所有的RadioButton必须作为RadioGroup的子view才行。分2行RadioGroup。使用RadioGroup的setOnCheckChangeListener来监听,当选中的radio是属于group1的时候,使用group2

2020-10-21 15:27:33 965 1

原创 TextView显示多个空格

有时使用TextView时需要在文字间显示空格,但是又不想用2个textview来实现,这时有2种方式可以实现TextView文字之间空格。在xml中直接填写文字,如:android:text=“你好 hello” // 显示 你好 hello(中间2个空格)1的写法虽然解决了问题,但是不利于语言国际化,一般字符串显示都是通过资源文件string来实现的...

2019-12-24 14:28:06 771

原创 Mac系统配置Android Studio的gradle命令

前言:一般我们打包apk都是用的AndroidStudio直接签名生成,这就造成了很多人不知道gradle除了可以用来配置依赖外,还可以用来编译生成apk。还有就是,在使用apk插件框架的时候,就需要使用gradle来编译apk,否则会出错。这里说的是mac系统下配置gradle。找到Android Studio应用图标在Mac"应用程序"里面找,找到后使用control键+点击,然后选...

2019-12-19 17:25:32 1415

原创 gradle更换版本号错误

想使用插件化框架来帮助业务分离,于是用到滴滴开源的VirtualAPK框架。但是在将gradle版本从3.4.1更换到3.1.0时,报了以下故障:解决方法1、将style里面的主题theme换成:Theme.AppCompat.Light.NoActionBar2、将build.gradle里面的implememtation ‘androidx.appcompat:appcompat:...

2019-12-19 15:37:47 211

原创 TextView显示多个空格

有时使用TextView时需要在文字间显示多个空格,如“你好 hello”,但是又不想用2个textview来实现,这时有2种方式可以实现TextView文字之间空格。1. 在xml中直接填写文字android:text=“你好 hello” // 显示 你好 hello(中间2个空格)2. 上述写法不利于语言国际化,一般都是通过资源文件string来限定文...

2019-11-20 09:56:59 415

原创 android studio去掉工程未用资源

简介在实际开发中,有时候项目迭代更新的时候会替放弃一些旧的资源或者string字符串。这样就产生了很多未用的图片或string字符串资源,增大apk的大小。如果一一对比找出这些无用资源,那就真是太难了。这时利用Android Studio的一些小功能可以轻松实现删除无用资源。点击Android Studio上的Analyze功能,选择Run Inspection by Name.在弹...

2019-10-08 16:18:36 346

原创 android反编译apk教程

文章中所用到的反编译工具下载地址:android反编译工具.zip一、下载jd-gui工具该工具用于查看反编译后的源码。二、下载apktool工具该工具用于资源文件的提取,包括图片、布局文件。使用步骤:解压apktool工具将需要反编译的apk拷到apktool工具目录下,如test.apk打开cmd命令窗口,定位到apktool目录下,输入apktool.bat d -f te...

2019-08-22 18:10:28 274

原创 Spring Boot服务器配置完整篇(二)——mysql数据库的安装

简介:本篇主要介绍云服务器mysql的安装配置以及常用命令。下载mysql数据库安装包由于SpringBoot jar程序自带了tomcat,因此若使用jar包方式部署服务器,则不需要另外安装tomcat。这里安装数据库使用官网最简单的方式,使用art方式安装.登陆mysql官网,选择apt方式拉到最下面下载最新的Mysql配置包上传及安装mysql在上一篇文章中,我们建立...

2019-04-20 10:58:03 775

原创 Spring Boot服务器配置完整篇(—)——jdk环境配置

简介:本篇主要介绍运行环境的选择、远程登陆以及java jdk安装配置。1、运行环境这里使用的是阿里云,具体流程是登陆阿里云官网,然后购买云ECS服务器,系统选择的是ubantu 16.04 64位。2、远程登陆云服务器主机购买好云服务器后,虽然可以在阿里云网页远程登陆主机,但是为了方便,一般还是使用远程登陆工具登陆。这里使用的是xshell6登陆。直接在官网下载xshell6安装在电脑...

2019-04-20 10:09:20 2136

原创 Android定制个性化字体

本例demo下载地址:CustomFontDemo简介:有时我们嫌Android自带的字体难看或者需要在某个显示文本的地方加点个性化字体,这时就需要自定义字体了,那么在Android开发中如何在特定的位置显示自己指定的字体呢?1、创建存放字体的文件夹在工程res目录下建立assets文件夹,然后在assets目录下新建一个专门存放字体的文件夹fonts。之后在fonts文件夹放进个性化...

2019-03-27 20:27:09 629

原创 微信支付签名算法java实现

本例demo下载地址:WxPayDemo简介:使用微信支付的时候有一步需要实现对各个参数升序排序后进行签名,再把签名后的结果加到参数里面,然后再将参数转换为xml格式去请求,具体要求如下:java代码实现:private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5", "6", "7",...

2019-03-18 20:13:44 4953

原创 springboot 添加文件记录日志

简介:服务器一般都需要记录文件日志,以便发生问题时能追溯问题。下面介绍使用SpringBoot开发服务器程序时怎么记录文件日志。- 1、在工程resources目录下创建logback-spring.xml文件(这个文件的名称必须叫这个名字)下面是该文件的内容及解释,并可以直接修改及使用:<?xml version="1.0" encoding="UTF-8"?><c...

2019-03-14 19:15:38 1663

原创 Activity的生命周期和启动模式

问题1:onStart和onStop、onResume和onPause分别是对应的一对,但是看起来差不多,有什么不同呢?答:区别是onStart和onStop是从Activity是否可见这个角度来回调的,而onResume和onPause是从Activity是否位于前台这个角度来回调的。问题2:假设当前Activity为A,如果这时用户打开一个新ActivityB,那么B的onResume和...

2019-03-11 19:37:41 240

原创 Android Studio将jni代码模块化

本例源码下载地址:ModuleDemo简介:当我们的app代码量越来越多时,难免会有一些希望抽出来共用的代码,这时就需要将其封装成库提供给其他应用使用。库可以以传统jar包的形式提供出来,也可以用aar的形式提供。不同的是,jar形式只能包含java代码,而aar形式的库则可以包含Android资源和一个清单文件包括相应的C/C++代码,这样可以绑定布局和可绘制对象等共享资源。以下用一个具...

2019-03-09 10:52:42 980

原创 LeetCode-Maximun Product Subarray

本列源码下载地址:MaximunProductSubarray题目描述:题目大意是给定一个整数数组 nums ,需要在数组中找出乘数最大的子数组。思路:1、题目中有假设序列至少包含一个数。则我们需要假设只有一个数的情况。2、由于有负数,负数乘正数可以将最大乘积瞬间变为最小乘积,最小乘积瞬间变为最大乘积。因此需要变量保存上个最大乘积和最小乘积。3、由于只需要知道乘积结果而不需要知道具体...

2019-03-06 19:30:16 145

原创 LeetCode-Search a 2D Matrix II

本例源码下载地址:SearchMatrix题目描述:题目大意是给编写一个高效率的算法来查找一个mxn的二维矩阵数组里面是否存在一个目标数。该矩阵的有2个特点:1、每行的元素从左到右升序排列2、每列的元素从上到下升序排列思路:1、题目中没有说明该数组是不是空的,因此需要对空数组判断。2、简单的遍历二维数组可以找到,算法复杂度为O(mxn),但是并不高效。3、从数组特性来看,每行及...

2019-02-27 19:22:31 208

原创 LeetCode-MajorityElement

本例源码下载地址:MajorityElement题目描述:题目大意是给定一个长度为n的数组,找到数组中的众数。并给出众数的定义为:在数组中出现的次数大于n/2的元素。思路:1、题目关键词“出现次数大于n/2”,这里可以联想到之前的题目:找出发贴水王。2、根据次数的关键词,可以从次数入手。假如我们把数组按照出现最多的顺序排列,那么由于出现最多的那个超过了n/2,比如个数为n/2+1吧,我...

2019-02-23 16:15:08 194

原创 LeetCode-SingleNumber

本例源码下载地址:SingleNum题目描述:题目大意是给定一个非空整形数组,数组内每个元素都出现了2次,只有一个特别的数字出现了一次,希望使用线性时间(0(n))复杂度找出这个只出现一次的数字。思路:1、题目已经说清楚了是线性,因此只需要一个循环就能找出。2、从每个元素出现2次入手,可以利用这个来找出数字的特性。在数学里面,异或运算是指位与位之间遇到相同的则该位结果为0,不同的数为1...

2019-02-23 10:56:22 308

原创 LeetCode-AddTwoNumbers

本例代码下载地址:AddTwoNumber下载题目描述:大意是给定2个非负链表l1和l2,每个链表节点存储一个个位数字,整个链表代表一个高位在右的数字(即跟我们平时看到的数字相反)。将这样的2个链表相加组成的数相加的结果生成一个新的链表。解决思路:了解规则后看似挺简单的,2个链表按照从左到右的节点相加即可。这里需要注意几点细节:1、给定2个链表都为空时的处理。2、2个链表长度不同时的...

2019-01-19 17:15:52 194

原创 LeetCode-TwoSum

题目描述:简单地说就是给出一个数字和一个目标数,求数组中符合目标数的任意2个数(不包括自身)在数组中的下标。解决思路:常规做法是for循环,通过第一个数值(比如下标为0,1,2……)与剩下数值比对,符合条件的即为答案。时间复杂度为O(n^2)。代码如下:public int[] twoSum(int[] nums, int target) { if (nums.leng...

2019-01-19 11:44:03 236

原创 Android Jni开发-实战篇(CMake)

本例demo下载地址:JniDemo下载简介上篇介绍了Android Studio中CMake简单配置jni开发。不清楚的可以看Android Jni开发-基础配置篇(CMake)如果不想麻烦的话直接在示例Jni代码native-lib.cpp中添加自己的业务逻辑即可。但是这样当代码一多了的时候不好扩展也不好管理,因此这次来实践添加自己的Jni代码。目标:实现一个简单的jni函数sum...

2019-01-17 20:27:08 5511 1

原创 Android Jni开发-基础配置篇(CMake)

简介:涉及到一些算法或者底层驱动的时候,往往需要使用jni来开发。现在官方推荐使用CMake工具来开发jni。使用CMake开发Jni其实挺简单的,要求不高的话只需要简单配置一下就可以使用了。配置环境使用CMake进行Jni开发需要使用CMake插件、LLDB插件、NDK插件,这些都可以通过Android Studio很快地安装。打开SDK Manager,找到Android SDK-&...

2019-01-16 18:04:34 2049

原创 webview.pauseTimers()问题

在进行android hybrid开发的时候,一般在不需要webview时需要将webview进行销毁,但是如果销毁前调用了webview.pauseTimers()这个方法就需要注意了,调用pauseTimers()这个方法会将整个app所有webview的js中的定时器停掉。即使没有调用这个方法的webview也不能幸免。与此类似的是,即使在app最后一个activity退出时调用pause...

2019-01-09 20:22:34 3581

原创 js使用canvas的drawImage()绘制图片不显示

起因:在使用canvas绘制图片时,发现根据w3cschool里面的绘制代码绘制图片显示不出来。示例代码如下:<script type="text/javascript">var c=document.getElementById("myCanvas");var cxt=c.getContext("2d");var img=new Image()img.src="flo...

2018-12-18 20:18:20 9480

原创 Android Studio不能预览布局

Android Studio某些版本打开xml文件预览布局时出现rendering problems,导致不能实时预览xml的布局。解决方法:1、打开res/values/styles.xml文件,找到AppTheme。2、将parent="Theme.AppCompat.Light.DarkActionBar"改为parent=“Base.Theme.AppCompat.Light.Da...

2018-12-15 14:09:48 1098

原创 java改变byte的某一位值

今天在对下位机发送指令的时候,由于下位机是根据byte里面的某一位值来确定某个功能是否需要开启/关闭的,因此控制下位机需要在改变某一位值的同时保留其他值不变。这里以改变第2位值为例。刚开始时头脑比较蒙,首先想到用int数组来保存对应byte的值,然后改变后对下的下标值来达到效果。如2,那么int数组为[0,0,0,0,0,0,1,0]。如果要关闭,则把第2位值变为0,即[0,0,0,0,0,0...

2018-12-12 19:28:18 6056

原创 android 生成javadoc时出现“编码GBK的不可映射字符”

我们知道AndroidStudio可以很方便地生成javaDoc文档,但是如果类注释中出现中文,那么当生成doc文档的时候会出现“编码GBK的不可映射字符”错误。这时可以在生成文档时,在other command line arguments里面输入-encoding utf-8 -charset utf-8...

2018-12-10 19:05:10 377

原创 Android Hybrid混合开发

本例demo下载地址:HybridDemo下载简介:混合开发(Hybrid)也有一段时间了,现在闲下来总结一下。说到混合开发,重要功能有2种,一是网页端调用安卓原生接口或功能,二是安卓原生调用网页功能。效果图:Hybrid开发流程:1、Android端编写网页调用接口创建一个供网页端调用的类,如JSObject,里面编写供网页调用的方法,记得在方法上面添加@JavascriptIn...

2018-11-28 19:34:46 4248

原创 Android app添加后台拉起机制

本demo源码下载地址 App拉起机制源码下载简介:做智能售卖设备需要app一直在前台显示,但是有时由于一些不当操作或者系统原因会使app退出,导致设备不能使用。这时就需要拉起机制了。拉起机制目前实现方式主要有2种。1、利用Activity生命周期创建一个类MyApp继承自Application类,在该类通过监听所有activity生命周期来判断activity是否全部销毁,以此来...

2018-11-06 20:24:25 7159 1

原创 记一次乱用git reset --hard的惨痛经历

起因:今天在用git 的时候脑抽想回到某个版本,于是随便上网搜了下命令,也没仔细看,就用了git reset --hard xxx(commit id),结果版本是回了,但是工程里的所有新加的文件全部都自动删除了,自动删除了……这可真的急坏了,好几天的心血都在这里呢!!!!稍微冷静下来后,怀着一丝希望去找恢复的方法,还真的让我找到了。解决方法:stackoverFlow上有人建议使用gi...

2018-10-30 20:12:37 2817 2

原创 Android价格精度问题

简介Android开发一般使用double类型来表示小数,如表示价格等,一般在要求不高的场景中使用是没有问题的,但是当double涉及到类型转换或者运算时是会有精度问题的。例如用double来表示商品价格,如设置的价格16.9元,一般为了更好地扩展会设置一个折扣值,当没有折扣时实际价格=16.9 * 1.0(折扣,8折为0.8)。这在显示端是没有问题的。但是由于金额支付时接口一般是以分为单...

2018-08-29 19:18:48 1209

原创 java byte数组异或校验时出现负数问题

简介最近由于需要对接校园的刷卡机支付,协议需要用到异或校验。参照校验的流程对相邻数组进行异或,得出的结果却与示例的不一样,而且还是负数。 起先以为自己的算法或者数据有问题,但是检查了一遍后还是一样。分析原因由于协议中有字段表示的数值大于127,如协议中该字段16进制为0XA2,本来数值应该是162,结果转变成byte时变成了-94,异或校验后该字段的数值变为了负数,导致异或校验的...

2018-08-27 19:06:14 3093 2

原创 SpringBoot + Nginx配置SSL证书

简介:由于小程序访问服务器地址需要强制使用https,因此需要加服务器加SSL证书。springboot本身也可以通过tomat配置证书或者将证书集成到jar包里面,但是放在jar程序的证书格式局限在.p12格式,而生成的证书一般是crt或pem,因此转换起来很不方便。这时可以使用nginx代理https请求,从而达到用nginx配置SSL证书的目的。安装及配置nginx安装和配置ng...

2018-08-17 14:50:01 4391 3

原创 Ubuntu安装nginx

简介: 现在服务器一般采用nginx来做http代理安装gcc和g++apt-get install build-essentialapt-get install libtool安装pcre依赖库apt-get install libpcre3 libpcre3-dev安装zlib依赖库apt-get install zlib1g-de...

2018-08-16 17:58:03 7270 2

原创 AndroidStudio使用inspect code帮助优化代码

简介:很多工程都有专门的代码检查工具,Android的工程也不例外,Eclipse时代有checkstyle等优良的代码检查工具,不过AndroidStudio发布后自己集成了一个代码检查工具Inspect Code。下面就来介绍如何使用Inspect Code来优化代码。打开Inspect Code打开IDE,点击Analyze->Inspect Code。 选...

2018-08-14 17:50:34 4871

原创 SpringBoot MySql数据库中文乱码问题排查实纪

引言:最近用StringBoot开发了一个简单的小程序服务器,发现通过post请求插入的中文字段在数据库中是显示“???”的形式,本来不以为意,以为是显示的问题,谁知通过get请求获取数据的时候返回的也是“???”,这下就开始慌了,于是开始了问题的排查。以下为排查的过程。首先上网搜索“mysql中文乱码”,结果倒是一大堆。 - 排除IDE编码问题 按照网上的信息,先排查IDE的问题...

2018-07-30 19:40:56 9303 5

原创 谷歌Android开源串口通信使用

Demo下载地址: 谷歌官方串口库使用引言:现在的串口通信多用于嵌入设备中,Android主板与各种板卡之间的通信。因此串口通信在未来智能设备中应用会很广泛。现在市面上几乎所有的Android串口通信库都是用的Google开源的https://github.com/cepr/android-serialport-api封装而成。 但是很多第三方库质量参差不齐,出了问题也不知道是什么...

2018-07-27 17:50:17 4879 5

原创 Android Studio CMAKE_C_COMPILER not set, after EnableLanguage

起因一个用cmake编译Jni的工程原来是可以正常编译的,但是换电脑后用新的Android Studio版本下载Cmake和Ndk后却不能正常编译,最终报标题所示的错误。分析后来通过比较分析得出:原来的工程中ndk版本是16的,安装新Android Studio后ndk只有17的版本可更新选择,导致ndk 16的某些功能不兼容。解决方法网上下载或拷贝之前版本的ndk 16包,然...

2018-07-14 11:56:59 3511

原创 springboot2.0 + websocket + android客户端实战

简介WebSocket是HTML5中的协议,支持持久连接,可以有效解决客户端和服务端之间数据数据同步时需要轮询的问题。效果图服务端创建web工程(此处省略)引入websocket maven依赖(springboot2.0以上才支持)找到工程的pom.xml文件夹,添加以下依赖。<!--websocket springboot2.0以上才支持-->...

2018-07-14 11:07:09 7391 3

原创 升级android studio3.0 在xml中新增资源ID找不到

升级android studio3.0后发现新增的资源ID(包括string等资源)提示是找不到的,即使将新增的ID复制进去也是提示错误,但是编译或者clean后就可以恢复正常了。但是没有以前那样能自动识别编译。**解决方法:**在build.gradle的defaultConfig中新增下面语句:manifestPlaceholders = [UMENG_CHANNE...

2018-03-15 13:47:18 4721 6

android反编译工具.zip

文件夹内包含apktool工具、dex2jar工具、jdgui工具。apktool用于反编译apk资源,dex2jar工具用于反编译dex代码,Jdgui工具查看反编译后的dex代码。

2019-08-22

空空如也

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

TA关注的人

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