自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

蓝不蓝编程

专注分享编程基础知识,涵盖Java、安卓、iOS、小程序、Flutter、鸿蒙等

  • 博客(39)
  • 资源 (12)
  • 收藏
  • 关注

原创 安卓实现多行文字跑马灯效果

背景介绍因UI设计,需要实现跑马灯效果,要求在同一个位置,实现文字滚动(上下或左右).实现方案集成孙福生提供的MarqueeView开源库. 这是一个很小巧的库,代码少,效果好,github上star数量还非常高.支持文字从上到下,从下到上,从左到右,从右到左滚动;支持设置滚动周期;支持设置文字大小、字体、颜色.先上效果图集成步骤添加依赖implementation 'co...

2019-04-30 10:19:32 754

原创 如何用最快的速度熟悉安卓项目老代码

背景做开发最痛苦的事情,不是写代码,是看别人的代码,看老代码. 写个功能,刷刷就完了,要看懂别人的代码,就想骂娘.但是作为开发进入一个老项目时,又不得不熟悉老代码.那怎么样才能最快的熟悉呢? 安卓开发里要了解老项目时,一般先从UI开始,一边在手机上把app跑起来熟悉界面,一边看代码.那么怎么找到当前浏览界面对应的代码呢? 大多数情况下,可见界面是一个activity,有时主体是fragmen...

2019-04-29 19:39:59 1086

原创 如何在宿主app中debug插件代码

背景介绍当前很多团队已经在进行插件化开发了,插件化的两大好处:插件升级方便,用户不必升级apk就能完成版本升级.适合多团队协作,各自负责自己的插件,最终apk都集成到宿主app中.我们团队也使用了插件化,近期因为插件工程直接运行出现了问题,需要在宿主app中才能运行.但是通过宿主app运行,如何debug呢? 如果不能debug,开发效率立马回到原始社会.解决方案在AS中打开插件...

2019-04-29 17:14:58 549

原创 把玩Kotlin依赖注入框架Koin

简要介绍Koin是一个Kotin极轻量的依赖注入框架,据官方资料显示,它无代理,无代码生成,无反射。把玩手法添加依赖//Koin for androidimplementation 'org.koin:koin-android:2.0.0-rc-1'//Koin for scope featureimplementation "org.koin:koin-android-sco...

2019-04-19 10:39:38 1663

原创 上传镜像到docker hub和阿里云Docker Registry

上传到docker hub创建镜像:sudo docker build -t 本地镜像名 .对本地镜像打tagsudo docker tag 本地镜像名:镜像版本号 docker网站用户名/远程仓库镜像名上传sudo docker push docker网站用户名/远程仓库镜像名上传到阿里云Docker Registry先登陆阿里云,在服务中查找“容器镜像服务”,然后创建镜...

2019-04-18 16:55:06 710

原创 ktor生成可独立发布jar包(通过shadow打包)

ktor简要介绍见利用Ktor+KMongo打造全栈异步非阻塞后端架构如何打包开发出了版本,除了本地运行,再就是要打包发布.ktor也支持几种打包方式,如war、jar.本文介绍如何生成jar包.操作步骤一、build.gradle配置:repositories增加classpath 'com.github.jengelman.gradle.plugins:shadow:5.0...

2019-04-17 19:11:37 1720

原创 ktor启动报错:Module function cannot be found for the fully qualified name 'ApplicationKt.module'

背景使用Ktor开发服务端,启动时报错:Exception in thread "main" java.lang.ClassNotFoundException: Module function cannot be found for the fully qualified name 'ApplicationKt.module' at io.ktor.server.engine.Appl...

2019-04-17 17:14:43 957

原创 安卓程序报错: No package ID ff found for ID 0xffffffff.

错误描述App运行就报如下错误:No package ID ff found for ID 0xffffffff.问题原因及解决方案constraintlayout 2.0.0-alpha4版本的问题,回退到2.0.0-alpha3就可以了.PS: 这个是在一个英文网站上搜到的,刚好受用,哈哈.附录https://windows-hexerror.linestarve.com/q/...

2019-04-17 14:35:08 11470

原创 Unable to create call adapter for kotlinx.coroutines.Deferred

背景在使用Kotlin coroutines结合Retrofit获取网络数据时,出现如下报错:2019-04-16 15:24:47.210 20471-20471/com.cxyzy.note E/RepoViewModel$getRepo: java.lang.IllegalArgumentException: Unable to create call adapter for kotl...

2019-04-16 15:31:14 4264 1

原创 安卓四种activity启动模式介绍及应用场景说明(standard,singleTop,singleTask,singleInstance)

简要介绍安卓采用栈来管理activity,每启动一个新的activity,就将原先的activity压入栈中,当用户返回时,就将栈里的activity推出来. 一个app可以有多个栈. 当一个app出现多个栈时,在系统的最近任务里就会出现多个窗口,如下图:四种activity启动模式standard 每次跳转到activity,都新创建activity.singleTop 当目标ac...

2019-04-15 11:42:42 862

原创 如何打开安卓模拟器里的开发者选项

简要介绍网上一般都是介绍匹配手机打开开发者选项的(如华为等),本文介绍一下安卓模拟器里如何打开开发者选项。(How to enable developer options in android emulator?)操作步骤打开Settings->System->About emulated device不停的按“Build number”,蹂躏它,直到它告诉你,你成功了(Y...

2019-04-12 18:25:45 9153 2

原创 安卓onSaveInstanceState和onRestoreInstanceState触发时机

简要介绍很多介绍安卓生命周期的文章,都没有介绍到onSaveInstanceState和onRestoreInstanceState这两个函数,本文专门来介绍一下。onSaveInstanceStateonSaveInstanceState按照官方解释,是当activity被临时销毁时才执行的。原文:invoked when the activity may be temporarily...

2019-04-12 17:49:33 699

原创 安卓学习入门之Service基本使用方法

简要介绍Service是安卓的四大组件之一,常用来在后台执行一些耗时长的任务. Service的启动分为startService和bindService两种方式. 对于bindService方式,采用的类似服务端和客户端通信的方式,可以允许多个客户端连接到service上,允许对一个service断开连接,再次连接;activity可以不断调用service里的方法实现和service的通信(如...

2019-04-12 15:05:24 364

原创 安卓学习入门之IntentService基本使用方法

简要介绍Service是安卓的四大组件之一,常用来在后台执行一些耗时长的任务. 但是因为Service是运行在主线程的,如果要执行耗时任务则需要创建线程.而IntentService则是包含了内置线程的,用于简化任务的执行.IntentService的启动也分为startService和bindService两种方式,但是因为bindService方式跟Service无差别,所以一般不会对Int...

2019-04-12 15:05:13 385

原创 Coroutines+Retrofit实现网络请求

简要介绍Retrofit是当前应用非常广泛的网络请求框架,而Coroutines则是Kotlin中用于执行异步任务的框架,比RxJava还要方便易用,本文将展示一个采用Coroutines+Retrofit的网络请求demo. 若想了解RxJava+Retrofit,可参考《RxJava+Retrofit实现网络请求》集成步骤app工程的build.gradle中添加依赖impleme...

2019-04-10 22:08:23 1267 1

原创 RxJava+Retrofit实现网络请求

简要介绍Retrofit是当前应用非常广泛的网络请求框架,通常结合RxJava来进行网络请求,本文将展示一个采用RxJava+Retrofit的网络请求demo.集成步骤app工程的build.gradle中添加依赖//retrofit2implementation 'com.google.code.gson:gson:2.8.5'implementation 'com.squar...

2019-04-09 15:04:15 447

原创 gradle文件中引入其他gradle文件

背景:安卓项目中,gradle文件也逐渐变得臃肿起来,需要分开管理,否则一大堆在一起,就很难维护了。解决方案:采用**apply from: ‘xx.gradle’**这样的语句就可以引入其他gradle文件了。Demo(集成aspectj):1.aspectj.gradleimport org.aspectj.bridge.IMessageimport org.aspectj.br...

2019-04-09 10:16:12 3701

原创 为什么Kotlin比Java能大量减少代码

简要介绍使用Kotlin已经有好一段时间了,一直在想,到底Kotlin厉害在哪里,为什么我要从Java转到Kotlin上,特此整理一下Kotlin的一些优点. 本文专注Kotlin是如何减少代码书写的.1. 简化空对象的处理val userName = a?.b?.c?.d ?: ""详细文档,可参考:《利用Kotlin优雅的解决Java的空指针问题》2. 属性访问,代替Get/Set方...

2019-04-08 19:52:09 696

原创 使用Kotlin Android Extensions代替ButterKnife和findViewById

简要介绍安卓开发中,activity获取xml文件中控件,最开始的方法是findViewById,后来出现了ButterKnife,于是很多项目都改用ButterKnife了.但是随着Kotlin Android Extensions的推出,有更简单的玩法了.使用方法app工程顶部添加apply plugin: 'kotlin-android-extensions'如果工程本身不是Ko...

2019-04-08 16:56:26 996

原创 Kotlin构造函数(constructor)完全解析

简要介绍Kotlin的类必须有一个主构造函数,可以有多个次要构造函数.主构造函数1. 写法一(主构造函数初始化代码在init块中)class User constructor(name: String) {val name: Stringinit {this.name = name}}2. 精简写法class User constructor(name: String) {...

2019-04-08 16:06:19 11461 1

原创 为什么Kotlin属性访问方式比Java的Get/Set方式好

简要介绍一开始接触Kotlin,就发现Kotlin是采用属性访问的,和之前Java的Get/Set方法不一样.不过感觉这也没有什么牛B的,因为Java只要把字段设置为public,那也是可以通过属性访问的.类样例Java代码public class User { private String name; public String getName() { ...

2019-04-08 14:59:54 1594

原创 利用Kotlin优雅的解决Java的空指针问题

简要介绍Java编程中有一个祖传痛点,关于对象调用的对象为空指针(NullPointerException)问题.常常为了获取一个属性,需要进行这样的调用a.b.c.d. 但是因为每一层都有可能出现空指针,于是代码要这样写.if(a!=null && a.b!=null && a.b.c!=null ){...... String userName =...

2019-04-08 11:11:48 694

原创 安卓集成AOP:AspectJ

AOP是什么?AOP (Aspect Oriented Programming,面向切面编程),可以在运行时动态地将代码切入到类中指定方法、指定位置上的一种技术。说白了,就是把横切逻辑从业务逻辑 中抽离出来。哪些属于横切逻辑呢?比如,性能监控、日志、权限控制等等。AOP相关概念:JointPoint(连接点)Pointcut(切入点)Advice(增强)Adivisor(切面)Bef...

2019-04-08 10:19:12 593

原创 安卓使用room时报错:androidx.room.RoomProcessor was unable to process this class

问题描述/Users/jerry/projects/app-db/build/tmp/kapt3/stubs/debug/com/cxyzy/note/db/AppDatabase.java:7: 错误: [RoomProcessor:MiscError] androidx.room.RoomProcessor was unable to process this class because n...

2019-04-06 22:57:04 2465

原创 Kotlin编译报错:Error:Kotlin: [Internal Error] java.lang.IllegalStateException: Backend Internal error

IDE版本IntelliJ IDEA 2018.2.2解决方案升级IDE版本到 2019.1详细报错信息Error:Kotlin: [Internal Error] java.lang.IllegalStateException: Backend Internal error: Exception during code generationCause: Back-end (JVM) ...

2019-04-04 16:28:34 7266 2

原创 第一个Ktor程序

1. 为IntelliJ IDEA安装插件2. 新建工程3. 选择自动导入4. 修改Application.kt内容import io.ktor.application.*import io.ktor.response.*import io.ktor.routing.getimport io.ktor.routing.routingfun main(args: Array&...

2019-04-03 19:24:39 657

原创 利用Ktor+KMongo打造全栈异步非阻塞后端架构

简要介绍2017年Spring推出了WebFlux,填补了Java世界没有异步非阻塞架构的尴尬(nodejs正式靠着这个起家的),同时联合响应式数据库(MongoDB、Redis、Apache Cassandra、CouchDB)可以打造后端全栈异步非阻塞架构,其中采用Reactor作为异步执行基础.但是把玩了一段时候后,发现响应式的程序真是让人废啊.如果没有接触的可以看看《响应式编程(Reac...

2019-04-03 16:43:48 1737

原创 Kotlin函数默认值完全解析

简要介绍Kotlin函数定义时,支持对参数指定默认值,这样就有效减少Java之前定义重载函数的数量.简要对比如下:Java函数定义,如果sayHelloTo函数中的lastName可以使用默认值,则需要定义如下两个函数.public class Person { public void sayHelloTo(String firstName,String lastName){...

2019-04-03 13:52:40 1838

原创 非常好用的mongo数据库客户端工具Robo 3T

简要介绍Robo 3T是一个使用非常方便的mongo数据库客户端工具.下载https://robomongo.org/download创建数据库连接创建数据库创建集合插入数据插入单条插入多条(数据之间不要有逗号分隔)安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061点击关注...

2019-04-02 17:10:53 586

原创 使用Fastjson/Gson/Jackson美化json字符串格式

问题描述项目中需要对json字符串进行格式化,便于查看.原始格式:[{"id":1,"name":"Task1"},{"id":2,"name":"Task2"}]目标格式:[ { "id": 1, "name": "Task1" }, { "id": 2, "name": "Task2" }]解决方案添加依赖impleme...

2019-04-02 14:23:58 2604

原创 kotlin拷贝内容到剪贴板

import java.awt.datatransfer.StringSelectionimport java.awt.Toolkitfun copyToClipboard(info: String) { val clipboard = Toolkit.getDefaultToolkit().systemClipboard val tText = StringS...

2019-04-02 13:44:47 1426

原创 发布app到Google Play市场详细操作步骤

操作步骤申请Google Play开发者账号并且支付25美元,详细攻略参考:https://www.jianshu.com/p/7c97aa9c5fb6登陆google play网站,选择“PUBLISH AN ANDROID APP ON GOOGLE PLAY”并输入app相关信息.https://play.google.com/apps/publish/一共需要输入四部分信息,详...

2019-04-02 09:29:42 4267

原创 安卓Room存储复杂类型(类型转化)

简要介绍通常我们存储的是基础类型,如Int,String等,但是如果要存在复杂的类型时,那该如何呢?解决方案(以Date类型为例)定义类型转换器class Converters { @TypeConverter fun fromTimestamp(value: Long?): Date? { return if (value == null) null ...

2019-04-01 17:16:55 2898

原创 修改SVG(PNG)文件背景

背景从阿里iconfont上下载下来的图标背景是透明的,把图标当作悬浮按钮时,会露出后面的界面.问题图如下(加号图标后面的内容露出来了):解决方案在网上找了很久,都没有找到合适的方案,最后自己想了一个涂层叠加的笨办法.基本原理就是采用两种图合并到一起(同时要保留圆形图标外围的透明层)修改SVG文件背景从iconfont上下载我想要的加号图标,再下载一张圆形(内部有填充色的,这个要...

2019-04-01 16:26:17 1676

原创 利用Github Pages搭建个人博客

操作方法在github上完成注册后,新建仓库(New repository)命名仓库时,要命名为“github用户名”+“.github.io”.(必须这样命名)上传一个html文件到该仓库中,如index.html内容:<!DOCTYPE html><html lang="en"><head> <meta charset=...

2019-04-01 14:35:41 250

原创 在安卓中使用SVG矢量图

简要介绍SVG(Scalable Vector Graphics,可伸缩矢量图形 )是W3C推出的一种开放标准的文本式矢量图形描述语言,它是一种基于XML、专门为网络而设计的图像格式,SVG是一种采用XML来描述二维图形语言,所以它可以直接打开xml文件来修改和编辑.矢量图优点:1.使用点和线来描述图形,所有文件会比较小,同时也能提供高清晰的画面。2.缩放自由且不会失真,适配于任何分辨率的...

2019-04-01 11:41:41 994

原创 Android Studio自带图标制作利器Asset Studio制作多分辨率图标

简要介绍小团队如果没有专门的UI工程师,那图标就会成为一个问题,在此先推荐阿里巴巴的www.iconfont.cn. 在基于也有合适图标的基础上,如何快速生成app所要的所有分辨率图标呢?看看这么多图片目录,头都大了,一个个搞,不得累死?还好有贴心的Android Studio,自带Asset Studio来帮你解忧.操作步骤访问菜单New》Image Asset定制图标...

2019-04-01 11:01:05 1088

原创 安卓开发图标制作利器iconfont使用简要指导

访问www.iconfont.cn,搜索到想要的图标根据需要选择颜色(下面样例选择了白色)及尺寸最后点击下载,可选格式有“SVG,AI,PNG”安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061更多技术总结好文,请关注:「程序园中猿」...

2019-04-01 11:00:36 233

原创 安卓开发图标制作利器iconfont使用简要指导

访问www.iconfont.cn,搜索到想要的图标根据需要选择颜色(下面样例选择了白色)及尺寸最后点击下载,可选格式有“SVG,AI,PNG”安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061更多技术总结好文,请关注:「程序园中猿」...

2019-04-01 10:39:31 280

chrome浏览器护眼插件

chrome浏览器护眼插件,支持设置为豆沙绿,夜间模式等

2019-02-16

安卓启动时快速跳转到指定activity

安卓启动时快速跳转到指定activity

2018-09-04

通过Apache common pool开源包实现对象池

下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。 假定我现在有一个任务,就是对一堆字符串进行格式化,为了加快速度,采用了多线程的方式允许,而格式化则是通过对象StringFormat来实现。 采用池技术,目的在于循环利用此对象,避免不停的生成和回收类。 也许本样例并不是很恰当,但是如何StringFormat换成是数据库连接就非常适合池技术了,此样例仅用于说明如何使用apache common pool池而已。

2014-04-25

java动态代理

java及cglib动态代理样例,使用几个简单的例子说明如何使用动态代理

2014-04-16

java(cglib)动态代理样例

动态代理 对应如下文档 http://www.cnblogs.com/jqyp/archive/2010/08/20/1805041.html

2014-04-08

xml解析样例

C# xml解析类

2014-01-18

两台电脑通过无线共享上网攻略

两台电脑通过无线共享上网攻略,两台笔记本,都支持无线网络,还有一个天翼网卡可以上网,想两台机器都可以通过这个天翼网卡来上网

2010-03-28

javascript 调试工具/教程,支持浏览器IE firefox

在IE和firefox中调试javascript的教程

2010-03-25

JavaScript调试(Firefox) 手册

在firefox中调试javascript的详细步骤说明

2010-03-20

webwork简单例子

一个最简单的webwork例子,是myeclipse项目

2010-03-03

java工具类 ftp 文件比较 socket http

java工具类 ftp 文件比较 socket http

2009-09-17

空空如也

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

TA关注的人

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