- 博客(50)
- 收藏
- 关注
原创 项目重构之旅
最近让写月度总结,楼主没什么文采想半天不晓得扯点什么好;简单说下上月重构的事儿吧(代码规范好的不用看了,本章算是个人笔记)。搞过的都知道,一般公司为了尽快上线都是快速开发,比如分好模块几个人同时写,功能性的直接搜一下导进来等等,表面上看不出来有什么问题,但是如果你们其中的某个人离职或者有事请假了而刚好有个bug需要你改 肿么办??屡一遍他代码呗,ok也没问题,但是如果他的业务逻辑很复杂呢,屡一...
2018-08-06 19:48:57 760
原创 rxjava2 compose转换异常
java.lang.IllegalArgumentException:Unableto create converter for com.xxx.xxx.basebean.BaseRespose<com.xxx.xxx.Bean.MenuDetailsBean>rxjava2+retrofit2+greendao首先我的MenuDetailsBean是数据库的一张表也是后台...
2018-07-31 21:33:03 936
原创 GreenDao遇到的问题
AS版本3.0.1greendao版本3.2.2如果你的实体类实现了序列化接口可能会报:does not declare a static final serialVersionUID field of type long (536871008 at line 28).声明serialVersionUID变量或者光标放在类名上alt+enter生成也可以去设置里面把这个√上(我的AS设...
2018-07-19 17:13:59 824
原创 Litepal对象存储失败
我的操作:一个final修饰的对象用litepal存储后修改然后删除(不是用的对象的delete方法)再次存储就存不进去了解决不是对象的delete()方法,而是通过静态或其他方法删除的,这种情况对象自身是无法知道自己已经被删掉了,所以存储不进去。而你作为操作者你是清楚自己做了什么的,所以这个时候应该调用一下clearSavedState()方法,把对象的存储状态清理掉,然后再save就可以了。...
2018-06-11 13:04:53 1548
原创 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
在Android开发时,我们使用的大部分都是Java的api,比如HashMap这个api,使用率非常高,但是对于Android这种对内存非常敏感的移动平台,很多时候使用一些java的api并不能达到更好的性能,相反反而更消耗内存,所以针对Android这种移动平台,也推出了更符合自己的api,比如SparseArray、ArrayMap用来代替HashMap在有些情况下能带来更好的性能提升。介绍...
2018-06-11 12:48:33 208
原创 使用ExpandableListView遇到的问题
ExpandableListAdapter外层item的布局中添加CheckBox控件不能伸缩了没有加点击事件也没有铺满。。无语后来换了个button,记录下暂时木有时间去看原因
2018-06-08 19:04:52 188
原创 ArrayList中set(index,object)与add(index,object)方法的区别
set:将原来index位置上的object的替换掉add:将原来index位置上的向后移动List list=new ArrayList();list.add(index,obj);把第index+1个以及第index+1个以后的元素都往后移一位,类似elementData[i+1]=elementData[i];然后再把obj放到index的位置。当然,这个过程需要考虑index的合理性以及是...
2018-06-08 15:50:40 4131
原创 Vector与ArrayList与CopyOnWriteArrayList区别
1. Vector & ArrayList 1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的同步必然要影响性能,因此,ArrayList的性能比Vector好。2) 当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的...
2018-06-07 14:27:18 6177
原创 集成buggly热修复的时候报错
Error:A problem occurred configuring project ':app'.> Failed to notify project evaluation listener. > Tinker does not support instant run mode, please trigger build by assembleCeshiDebug or di...
2018-05-19 11:26:58 2740
原创 AS升级到3.+遇见滴问题
Error:Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve com.android.support:appcompat-v7:26.1.0. Open FileShow Details==大致意思就是依赖不上,一般都是网络原因,在File->Settings->Build...
2018-05-15 10:57:39 335
原创 Android调用系统裁剪黑框
Android调用系统裁剪,这个已经使用的很熟悉了。但是近期项目里使用的时候遇到了一些小问题,所以在此整理一下,以作记录。首先看代码:Intent intent1 = new Intent("com.android.camera.action.CROP"); intent1.setDataAndType(Uri.fromFile(new File(image.path)),...
2018-04-10 16:09:30 519
转载 TabLayout设置下划线(Indicator)宽度
原文http://blog.csdn.net/u013134391/article/details/70833903#再战TabLayout之下划线宽度这周的需求搞定之后,想到之前有一个小瑕疵,反正没什么事,索性较量较量如图官方原版就是小瑕疵,反射版本就是最终解决方案-Demo源码先讲解决方案。直接贴代码(要在tabLayout添加完所有的t
2017-11-24 10:11:13 6387
翻译 用MediaPlayer+TextureView封装一个实现全屏、小窗口的视频播放器
转自http://www.jianshu.com/p/420f7b14d6f6项目已添加IjkPlayer支持,后续逐渐完善其他功能。地址:https://github.com/xiaoyanger0825/NiceVieoPlayer为什么使用TextureView在Android总播放视频可以直接使用VideoView,VideoView是通过继承自Surface
2017-11-15 13:40:17 1497
原创 ImageView的scaleType属性
ImageView的scaleType,当设置为fitXY时,虽然ImageView显示那么点尺寸,但是,但是Glide加载图片时,却是以全分辨率加载的,于是加载几张,就OOM了。改成fitCenter或者centerCrop(试了一下fitStart、fitEnd也行,总之看需求了),就好了,会自动缓存小图,滚动起来也非常流畅。下面是粘自http://blog.csdn.net/
2017-11-13 10:13:06 218
原创 图片加载之Glide备忘录
相关方法with():指定了声明周期load():加载资源,String/Uri/File/Integer/URL/byte[]/T,或者 loadFromMediaStore(Uri uri)placeholder(resourceId/drawable): 设置资源加载过程中的占位Drawable。error():load失败时显示的Drawable。crossFade()/cross
2017-10-26 16:43:22 342
原创 Android 滑动,拦截事件处理
view 能够正常的吃掉点击事件, 但是如果是滑动事件时, 则是父View 来处理来滑动另一个View基本原理就是 在View group中得onInterceptTouchEvent 方法中判断是否是滑动,如果是滑动,那么就返回true 自身去消费滑动事件,还需要注意的是, 在处理滑动事件的时候需要注意 两个手指滑动的情况即 另一个手指按下也能够继续滑动,
2017-09-30 14:40:49 2929
原创 apk安装失败笔记
昨天公司刚发了测试机,我拿到一台魅蓝max.刚拆开手机。 今天插上数据线,run.结果居然安装失败。提示信息为:INSTALL_FAILED_USER_RESTRICTED。 顿时懵逼了,刚买的新机,就出现这个问题。无语啊。 刚开始还以为是Android studio的问题。结果模拟器跑了下,安装成功。 拿手机在其他人那跑了下,安装失败。好吧,手机的问题。 那到底是哪出了问题呢
2017-09-13 19:05:44 975
转载 SwipeRefreshLayout 设置下拉刷新的距离高度
SwipeRefreshLayout 的下拉刷新距离比较短,有的时候,想要手动设置它的下拉刷新高度,如何解决呢?在网上找了好一会,居然没搜到比较满意的答复,好些都是复制粘贴。于是乎,求人不如求己,拿出API文档,大概看了下,发现了三个相关API:一、setProgressViewEndTarget方法setProgressViewEndTarget (boolean scale, in
2017-08-29 16:42:17 6171
转载 SwipeRefreshLayout和ViewPager滑动冲突的原因和正确的解决方式
出处http://blog.csdn.net/u010386612问题: 1. SwipeRefreshLayout会吃掉ViewPager的滑动事件。 2. SwipeRefreshLayout需要套在ScrollView和ListView上的时候才表现的比较友好,在其他ViewGroup上有点问题,不知道为什么,到时候去看下源码。(这问题已经被google修复)今天我只
2017-08-29 16:40:39 583
原创 Bitmap转成byte[]再用base64转成string
用户上传头像,上传的头像图片需要上传至服务器的MySQL数据库保存,当用户上传成功之后每次登陆后从数据库获取头像信息显示。由于之前一直使用JSON作为客户端和服务器端数据传输形式,JSON虽然使用方便但是不支持自定义类型,所以遇到的问题就是将二进制图片文件转成String,再传到服务器并保存到数据库。在查阅了一些资料后想出了一个方法:1,将图片转换成Byte[]2,利用Base64
2017-08-15 15:53:54 674
转载 ViewPager中嵌套VieRecyclerView 滑动事件解决
转自:http://www.jianshu.com/p/f1785b655019Android系统中的每个View的子类都具有下面三个和TouchEvent处理密切相关的方法:1)public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来分发TouchEvent2)public boolean onInterceptT
2017-08-08 15:11:04 943
转载 Android SwipeRefreshLayout 与 CoordinatorLayout 嵌套刷新
转自:http://blog.csdn.net/jdsjlzx/article/details/51412940SwipeRefreshLayout 与 CoordinatorLayout 嵌套刷新 1. 动态设置SwipeRefreshLayout的是否可以刷新 setEnable(boolean isEnable); 2. 设置SwipRefreshLayout刷新图标的位
2017-08-03 13:30:26 3370
原创 Android自定义样式的Checkbox
常见的自定义样式是改变checkbox的button图片,但是他的需求是去掉checkbox的选项框,使checkbox的样式类似button。我最初给的建议是使用TextView,点击一次改变背景颜色,然后保存当前状态(选中或未选中),但还是很麻烦,查找资料,找到了第二种checkbox的自定义样式方式,总结一下,备忘。 一、修改checkbox选项框样式首先我们要找到两张check
2017-08-01 10:08:53 3288
原创 Retrofit各个注解的含义及作用
写在前面本篇文章基于retrofit-2.1进行分析.1. 各个注解的含义及使用1.1 Body注解:作用于方法的参数使用该注解定义的参数不可为null当你发送一个post或put请求,但是又不想作为请求参数或表单的方式发送请求时,使用该注解定义的参数可以直接传入一个实体类,retrofit会通过convert把该实体序列化并将序列化后的结果直接作为请求体发送出去.示例:
2017-07-20 14:29:16 471
转载 玩转Android之数据库框架greenDAO3.0使用指南
用过ActiveAndroid、玩过ORMLite,穿过千山万水,最终还是发现greenDAO好用,ActiveAndroid我之前有一篇文章介绍过 玩转Android之数据库框架ActiveAndroid的使用,如果小伙伴们有兴趣可以去查看,ActiveAndroid目前存在的问题是没有更新了,GitHub上ActiveAndroid的更新都是两年前的事了。所以我们还是来看看这个目前非常活跃的数
2017-07-20 09:36:08 261
转载 简析 addToBackStack使用和Fragment执行流程
以前写切换fragment是写一个双层for循环外层记录上次操作的fragment里面用show显示当前选中的隐藏上一个刚知道有这个方法(还有这种操作???)这是俺转的http://blog.csdn.net/wenxuzl99/article/details/16112725在使用Fragment的时候我们一般会这样写: FragmentTransaction tr
2017-07-19 17:16:10 347
原创 Android混淆心得
混淆介绍首先先简单说一下什么是混淆和混淆的作用,其实这个搜索下可以找到一堆官方的说法等等,这里简单口语叙述一下,混淆就是把代码替换成a、b、c基本字母组成的代码,比如一个方法名为:function(),混淆后可能会被替换成a()。混淆的好处:代码混淆后阅读性降低,反编译后破译程序难度提高混淆后字节数减少,减少了应用了体积前者只能说有一点作用,后者则需要看代码的数量 当然不能
2017-07-11 10:53:11 409
原创 Android开发之线程池使用总结
线程池算是Android开发中非常常用的一个东西了,只要涉及到线程的地方,大多数情况下都会涉及到线程池。android开发中线程池的使用和Java中线程池的使用基本一致。那么今天我想来总结一下Android开发中线程池的使用。OK,假如说我想做一个新闻应用,ListView上有一个item,每个item上都有一张图片需要从网络上加载,如果不使用线程池,你可能通过下面的方式来开启一个新线
2017-07-09 14:34:29 231
转载 Google推荐的图片加载库Glide介绍
原文链接:Google推荐的图片加载库Glide介绍作者 : nuuneoi译者 : jianghejie校对者 : chaossss状态 : 完成在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。毫无疑问,这个库引起了
2017-07-04 11:39:08 200
原创 Glide 缓存策略 内存缓存和磁盘缓存
本文主要介绍了如何配置和管理Glide中的缓存,其中大部分内容都可以直接在官方Wiki中找到,这里只是进行了整理和汇总。言归正传,Glide支持图片的二级缓存(并不是三级缓存,因为从网络加载并不属于缓存),即内存缓存和磁盘缓存。磁盘缓存一般的图片缓存指的就是磁盘缓存,把网络上的图片缓存到本地,这样就不需要每次都从网络加载,既提高了加载速度,又为用户节省了流量。Glide在默认情
2017-06-30 13:37:20 2346
原创 Glide简单实用总结
Glide 是一个高效、开源、 Android设备上的媒体管理框架,它遵循BSD、MIT以及Apache 2.0协议发布。Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。Glide GitH
2017-06-19 21:26:32 459
原创 为RecyclerView添加item的点击事件
最终目的模拟ListView的setOnItemClickListener()方法,调用者只须调用类似于setOnItemClickListener的东西就能获得被点击item的相关数据。原理为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每
2017-06-16 15:13:59 467
转载 自定义圆角Dialog
转载自:http://blog.csdn.net/q4878802/article/details/46960165系统默认的Dialog默认是背景不透明的,有时候项目需要Dialog为圆角透明,这个时候的解决方案就是---重写Dialog- 系统样式 - 自定义以后的样式 自定义一个Dialog,继承Dialog package ktalk.kong.qin
2017-06-07 11:54:19 565
原创 Android studio 依赖aar包
同jar包一样拷贝到我们的libs文件夹下然后在build.gradle中添加repositories { flatDir { dirs 'libs' }}这里面添加你的aar包,SMSSDKGUI-2.1.4是我的aar包名换成你的包名重新编译一下就OKdependencies{compile name:'SMSSDKGUI-2.1.
2017-06-01 14:10:13 332
原创 Could not get unknown property 'ANDROID_BUILD_SDK_VERSION' 解决方法
Error:(7, 0) Could not get unknown property ‘ANDROID_BUILD_SDK_VERSION’ for project ‘:InitActivity’build.gradle如下apply plugin: 'com.android.library'dependencies {}android { compileSdkVe
2017-05-27 13:34:29 12664
原创 Android图片质量压缩以及缩略图生成
1、图片的质量压缩图片的质量压缩是指,仅仅压缩图片文件的大小,但当图片加载到内存中时,占用的内存大小并没有太大变化。可以通过质量压缩,加快图片上传的速度。代码如下:/***将文件压缩后覆盖源文件*/public static void compressImage(File file) {Bitmap bitmap=BitmapFactory.decodeFile(fil
2017-05-27 09:55:04 457
原创 Android APP性能优化
1. 为什么需要性能优化?上面说到,在时间窗口期内开发出产品是极端重要的,但是虽然基本功能我们实现了,但是开发出来的产品代码运行的效率怎么样呢?我们的App用户给用户的体验如何呢?我们的App在低端机上经常ANR、闪退、卡顿等我们的App在其他分辨率上显示惨不忍睹?我们的App在不同网络的情况下如何处理的? 我们的App体验如此之差,导致大量的用户流失。这些迫使我们认识到性
2017-05-24 09:25:34 254
原创 Android 视频播放的三种方式
1、使用其自带的播放器。指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型。2、使用VideoView来播放。在布局文件中使用VideoView结合MediaController来实现对其控制。3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活。1、调用其自带的播放器:Uri uri = Uri.
2017-05-21 19:38:35 365
原创 Android系统从
Android操作系统是一个由Google和开放手持设备联盟共同开发发展的移动设备操作系统,其最早的一个版本Android 1.0 beta发布于2007年11月5日,至今已经发布了多个更新。这些更新版本都在前一个版本的基础上修复了Bug并且添加了前一个版本所没有的新功能2008年--至今的版本Android 1.5(Cupcake纸杯蛋糕):智能虚拟键盘;使用widgets实
2017-05-11 19:49:19 447
原创 用MessageDigest提取String信息摘要也就是MD5值
import java.io.Serializable;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * Created by fengmai on 2017/5/4. */public class MD5Utils implements Serializab
2017-05-04 15:22:27 621
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人