- 博客(40)
- 收藏
- 关注

原创 Android6.0运行时权限扩展篇
GitHub地址这篇是关于Android6.0运行时权限扩展篇,之前写了一篇,里面有权限的主要介绍,之前的授权的思路,用户必须要同意授权后,才能进入首页,这样导致用户体验不好。android6.0动态权限,以及如何同时授予多个权限上面度权限的判断和申请方法做了很详细的描述了,这不再描述了,有不懂的开去看上面那篇。这篇文章主要介绍,用户拒绝授权后,依然能进入App,在首页中,
2017-08-11 17:17:47
1976

原创 RxJava2的使用以及RxJava2和RxJava的对比
RxJava2与RxJava的比较RxJava最核心的东西就是Observable和Observer。Observable会发出数据Observer可以在Observable发出数据 RxJava2最核心的是Flowable和Consumer
2017-02-06 14:35:46
20308
原创 jenkins配置自动打包
1、jenkis下载2、将下载的jenkins.war放在tomcat下面3、启动tomcat注:如果tomcat之前启动了,放在.war包后,需要重新启动一次4、解锁注:直接复制路径可能找不到,需要手动点击进去,授予权限5、插件安装6、设置管理员账号和地址7、创建一个项目8、配置项目地址9、配置JDK和Gradle版本,支持配置多个10、AAPT错误在打包的时候可能会遇到AAPT2错误,jenk...
2018-05-18 17:23:18
1712
原创 Android中Lambda表达式的引入和使用
在Studio3.0以后,lambda的引用发生了很大的改变,studio3.0以后,不再支持apt,导致不能使用retrolambda。这里只讲述3.0以后lambda的引用首先确保gradle plugin为3.0以上在app下的build.gradle添加下面的代码注:Studio3.0以后不需要再添加jackOptions支持 jackOptions { enabled...
2018-05-18 11:19:19
531
原创 win10上安装Tomcat
一、tomcat下载二、tomcat安装1、配置环境变量,CATALINA_BASE和CATALINA_HOME在系统变量里打开PATH,添加变量值:%CATALINA_HOME%\lib;%CATALINA_HOME%\bin2、服务安装打开cmd切换到tomcat目录下,执行service.bat install命令service卸载命令:service.bat remove三、启动tomca...
2018-05-17 17:42:05
710
原创 Java中内存分配:堆区(heap)、栈区(stack)、方法区(静态区)
Java中内存分配一共有三个区:堆区(heap)、栈区(stack)、方法区(静态区)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身3.Java的堆是一个运行时数据区,类的对象从中分配空间。这些对象通过new、newarray、anewarra...
2018-05-14 14:58:31
2221
1
原创 Android唯一标识
GitHub地址Android中能作为唯一标识有四个,但付出一定的代价还是还是能改变,所以目前Android中没有绝对的唯一标识。1、设备Id(IMEI) (需要授予权限)TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);r
2017-08-16 09:47:21
3170
原创 常用Markdown(MD)语法
1、标题 ## 一级标题最大## 二级标题带分割线### 三级标题2、段落、换行、加粗、斜体 段落** ** 粗体* * 斜体行尾空两格,表示 换行3、引用、代码块,分割线> 引用>> 子引用4、分割线---***其中---和***是粗的,##是细的分割线,后面可以跟文字5、列表*+
2017-08-11 15:26:30
2241
原创 RxJava中map的位置对其线程的影响,以及Toast不显示
1、首先看下面一段代码HttpClient.getInstance().service.requestHomeBaner() .subscribeOn(Schedulers.newThread()) .map(new HttpClient.HttpResultFunc .observeOn(AndroidSchedulers.mainT
2017-08-08 16:09:29
2094
翻译 Kotlin看法
Kotlin 能不能成气候最重要的并不是它有多好,而是有没有 Google 的支持。现在 Google 已经官方挺 Kotlin 了,我目前对它还是略微看好的。 不过鉴于谷爹以往的行为,半道发现 Kotlin 实在坑太多而放弃的可能性也是有的。1. 做好手头;2. 谨慎、果断地逐步转型。无论趋势再怎么发展,当下主流的东西先掌握好是最重要的。跟随趋势,慢慢进步和转型,让自己时刻保
2017-08-08 09:10:14
1689
原创 App中使用高德定位服务,少部分用户会反映定位不了
关于如何集成高德地图的定位,这里不再说了,高德地图官方文档上已经描述的很详细,这里主要说说,我们测试的时候定位正常,但有部分用户会反映定位不了,如何处理这类情况。高德地图官方集成文档关于运行时权限减少用户定位失败,需从下面几个方面进行分析:1、将高德SDK升级到最新版本,首先看下面一组统计,这是通过友盟统计,分析的到每天定位失败的人数。从折线图中可以明显的发现,
2017-08-05 11:40:49
10061
原创 自定义Dialog,以及通过接口设置点击事件
源码在GitHub上面1、自定义一个类,继承Dialog,创建构造器需使用主题,消除系统默认的背景public class CustomDialog extends Dialog { private OnClickListener mCancelButtonListener; private OnClickListener mSmsButtonListener;
2017-07-15 18:00:08
17464
原创 微信热修复Tinker
1、添加依赖:在root下的build.gradle中添加依赖app下的的build.gradle添加相关依赖注:这里除了添加tinker相关的依赖外,还需要添加 multidex解决65k限制,另外TINKER_VERSION配置在gradle.properties中 2、将官方地址build.gradle下的相关代码复制过来注:这里有点需要注意
2017-07-15 16:42:30
9446
原创 Android Studio技巧
1、添加书签:F11 添加书签(带标记):Ctrl + F11 显示全部书签:Shift + F112、Ctrl + Shift + "+" 展开代码块3、Ctrl + Shift + F12 隐藏所有面板4、上一个编辑的位置 Ctrl + Shift + Backspace5、在方法和
2017-07-15 11:58:04
9304
原创 FrameLayout的顺序,以及elevation对其顺序的影响,CardView的上层放了一个Button,为什么Button看不到了
Android中FrameLayout(帧布局)默认的 下一个会自动覆盖上一个。我明明在CardView的上层放了一个TextView,为什么TextView看不到了???
2017-07-14 19:03:29
14926
1
原创 Java修饰符以及Kotlin修饰符对比
Java语言提供了很多修饰符,主要分为以下两类:访问修饰符非访问修饰符访问控制修饰符Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java支持4种不同的访问权限。默认的,也称为 default,在同一包内可见,不使用任何修饰符。私有的,以 private 修饰符指定,在同一类内可见。共有的,以 public
2017-06-19 10:41:46
9986
原创 String.format()的使用
String str = String.format("今天已有%s位用户获得加息", welfareDto.getTotalPopulation());String类的format()方法用于创建格式化的字符串以及连接多个字符串对象 str=String.format("Hi,%s", "王力"); System.out.println(s
2017-06-13 14:16:35
9393
原创 ViewPager+Fragment实现懒加载(lazy-loading)
什么是lazy-loading呢?顾名思义就是在必要的时候才加载,否则不进行View的绘制和数据的加载。原因是Viewpager一次只会显示一个页卡,那么刚开始的时候,只需加载第一张Fragment页卡,其他的不加载,当用户向右滑动切换再进行加载。因为其他Fragment对于用户来说是不可见的,如果一开始就把全部Fragment一起加载,可能造成启动时卡顿的问题,更重要的是可能白白耗费用户的流量,
2017-05-19 15:29:02
10134
原创 android中ORM(对象关系映射)数据库greenDAO的使用
关于对象关系数据库的介绍,看另外一篇篇文章,litePal的使用以及关系数据库的介绍1、添加远程依赖// In your root build.gradle file:buildscript { repositories { jcenter() mavenCentral() // add repository
2017-05-19 14:35:33
9732
原创 git的使用以及git的写作流程
git常见命令:clone(克隆)、commit(提交本地)、push(推到服务器)、pull、fetch(下载)、merge(合并)pull = fetch + mergeremote(远程主机) branch(分支)git合并分切,A分支合并到B,首先切换到B分支,然后执行merge in A代码如下:将“new-idea” merge 到 “
2017-05-18 19:16:28
8981
原创 adb安装软件,monkey测试 以及如何停止monkey测试
monkey测试命令:adb shell monkey -p com.ruiqin.test -v 10000 说明:-p 后面跟要测试应用的包名 -v 测试的次数退出应用和拔掉数据线,都无法停止monkey测试,如需停止monkey测试,输入如下命令:adb shell 进入 控制平台ps | grep monkey返回来的数字,即是monkey
2017-05-17 17:59:59
15910
原创 setClickable(点击)、setEnabled(总开关)、setFocusable(焦点)的区别
setClickable表示点击事件,设置为true时,表明控件可以点击,如果为false,就不能点击;“点击 ”适用于鼠标、键盘按键、遥控器等;注意,setOnClickListener方法会默认把控件的setClickable设置为true。setEnabled 使能控件,如果设置为false,该控件永远不会活动,不管设置为什么属性,都无效;设置为true,表明激活该控件,控
2017-05-13 14:16:59
9604
原创 Java单例模式(singleton),饿汉式和内部类的区别
方法一:饿汉式单例public class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton() { } public static Singleton getInstance() { return INSTA
2017-03-22 00:03:21
15127
原创 Java的数据类型以及equals和==的区别
Java的数据类型分为两种:基本数据类型(值类型)和复合数据类型(引用类型)注:基本数据类型分为4类8种,String属于引用类型中的类在不同的数据类型中==和equals代表的含义不同:在基本数据类型中,没有eqauls,==代表值比较在复合数据类型中,当他们用(==)进行比较的时候,比较的是他们在内存中的存放地
2017-03-08 16:10:53
9175
原创 Java的集合(Collection、Map)和继承关系
Collection是对象集合Collection有两个子接口 List 和 SetList可以通过下标 (1,2..) 来取得值,值可以重复而Set只能通过游标来取值,并且值是不能重复的ArrayList、Vector 、LinkedList是List的实现类ArrayList 是线程不安全的, Vector 是线程安全的,这两个类底层都
2017-03-08 15:25:25
11906
原创 Android Studio的基本配置
1.设置主题导入主题颜色(jar)https://github.com/xinghongfei/android-studio-setting设置方法:android studio ->file->import setting ->选择jar包即可2.显示行号配置方法File | Settings 打开设置选择 Editor | General |
2017-02-22 16:58:38
9094
原创 Android Studio主题以及常用插件推荐
开发设置Android studio 主题(下载jar)https://github.com/xinghongfei/android-studio-setting设置方法:android studio ->file->import setting ->选择jar包即可Github Desktop是很多人使用命令行来操作,感觉自己很高大上。但如果你还不了解命令行的
2017-02-22 16:35:28
9464
原创 Chrome游览器插件推荐
1. OneTab使用Chrome经常会一次打开好多tab,很多是会用到的,又不舍得关,内存又耗着,这个时候点击下OneTab,直接把所有tab回收,然后每天的历史都给你记录着,接着你可以一键还原某一天的tab2. Page Ruler这个工具设计师必备,可以直接查看网页一些图片的详细像素大小、具体位置等,非常实用。3.Alexa Tra
2017-02-22 16:09:44
9056
原创 如何在GitHub上创建自己的项目
1、首先需要注册一个账号,注册后直接登录,进入如下的界面2、选择 Start project,弹出如下的界面,按照下面的来配置对以上对应的数字说明:1、表示的是项目的名字;2、表示项目是否公开;3、表示忽略类型,这里选择Android项目; 4、表示开源协议。3、创建成功后,自动跳转到如下的界面4、用And
2017-02-20 12:29:31
9701
原创 高德地图地理编码和逆地理编码,以及逆地理编码的时候如何去掉省、市、镇
地理编码和逆地理编码首先说说,何为地理编码,地理编码就是 给你一个地名,得到对应的经纬度(纬经度,高德地图实际是纬经度)知道地理编码,那么逆地理编码就不难理解了。逆地理编码就是给出经纬度,得到对应的地名。下面通过代码来实现,如论是地理编码还是逆地理编码都需要初始GeocoderSearch 已经设置对应的监听,setOnGeoco
2017-02-19 10:16:19
13550
原创 android6.0动态权限,以及如何同时授予多个权限,当用户禁用的后续处理
什么情况下需要动态获取权限:满足两个条件:①6.0以上系统 ②编译版本(compileSdkVersion)API23以上Android6.0 运行时权限,相关的方法主要有四个:1、检查是否授予权限ContextCompat.checkSelfPermission(mContext, permissions[i])返回的结果为PackageManager.PERMISSION_GRANTED(0)表示授予权限2、请求权限ActivityCompat.requestPermissions(Wel
2017-02-15 16:52:20
28462
1
原创 RecyclerView的使用方法以及item布局"match_parent"属性失效
使用RecyclerView首先需要创建构造器,创建构造器后,在对应的方法中引用。代码如下TravelRecyclerViewAdapter travelRecyclerViewAdapter = new TravelRecyclerViewAdapter(mTravelInfo, MyTravelActivity.this);mTravelRecyclerView.setLa
2017-02-14 13:15:14
9468
原创 Android开发中常见异常
ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.ThreadException线程异常,只能在原始线程(主线程 )更新视图在使用Retrofit+RxJava的时候,没有使用o
2017-02-14 12:29:08
9254
原创 BaseActivity+ButterKnife 地图在onDestroy中执行mMapView.onDestroy()遇到空指针的问题
BaseActivity+ButterKnife,继承子类中接入 地图,子类在onDestroy中执行mMapView.onDestroy()很容易出现空指针问题,原因是,ButterKnife已经解绑,mMapView为null首先是BaseActivity的代码@Overridepublic void onCreate(Bundle
2017-02-13 15:41:01
15989
原创 Android开发中过时方法总结getColor,singeLine
getColor方法在6.0中已经过时:@ColorInt@Deprecatedpublic int getColor(@ColorRes int id) throws NotFoundException { return getColor(id, null);}可以参考以下方法:使用ContextCompat.getC
2017-02-12 15:18:23
15823
原创 Fragment在remove的时候崩溃,报IllegalStateException: Can not perform this action after onSavaInstanc异常
如果在MainActivity中开启一个计时器,这个时候启动OtherActivity,在onFinish结束的时候,执行remove Fragment的时候,这个时候页面会崩溃,报IllegalStateException: Can not perform this action after onSavaInstanc异常。即,移除Fragment使用comit()的时候,未在栈顶会崩溃。
2017-02-12 15:15:50
9451
原创 Activity和Fragment的三种通信以及EventBus通信
Activity和Fragment之间的通信,分为三种情况1、Actvity --> Fragemnt2、Fragment --> Activity3、Fragment --> Fragment第一种:Activity --> Fragment调用FragmentManager的findFragmentById()的方法 得到
2017-02-07 14:59:01
12815
转载 这个项目碉堡了
就在前几天,Airbnb 开源了一个项目叫做 Lottie,我个人觉得这个项目简直碉堡了!动画相信大家都不陌生,在 App 开发过程中,适当的使用动画可以提升用户体验,使我们的产品锦上添花,对于一些简单的动画,我们很容易就能实现,但是对于一些比较复杂的动画,实现起来就比较麻烦了,比如下图的一些动画:怎么样?这些可不是简单的移动、缩放、旋转就搞得定的,可能
2017-02-07 14:27:46
8856
原创 onTouch返回true和false的区别,如何解决onTouch和onClick冲突
在开发中,我们会遇到某个图标可拖动的需求,我们会同时使用到onClick和onTouch事件,这个时候onClick和onTouch会发生冲突。1、我们先比较他们onClick和onTouch 的用法,从下面代码可以发现,onTouch有返回,而onClick无返回。这个时候你会好奇,返回true和false有什么区别?下面来分析有什么不同和区别。
2017-02-07 11:41:04
36028
3
原创 Toolbar的使用以及Theme.AppCompat主题的介绍,状态栏的颜色
mToolbar.setTitle("Title");setSupportActionBar(mToolbar);mToolbar.setNavigationIcon(R.mipmap.ic_launcher);android.support.v7.widget.Toolbar android:id="@+id/toolbar" andr
2017-02-06 15:01:53
16775
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人