Android
一品大帅
这个作者很懒,什么都没留下…
展开
-
GreenDao混淆配置
-keep class org.greenrobot.greendao.**{*;}-keep public interface org.greenrobot.greendao.**-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {public static java.lang.String TABL原创 2017-04-27 19:34:41 · 6675 阅读 · 2 评论 -
Android Studio: Caused by: com.android.build.api.transform.TransformException: NullPointerException
错误信息测试编译并打Debug包./gradlew assembleDebug --stacktrace2. 编译并安装debug包./gradlew installDebug --stacktrace发现编译成功,并且手机上安装上了。解决方式把Instant Run关闭,原因未知。...原创 2018-10-09 15:23:39 · 641 阅读 · 0 评论 -
Android sha1加密(RequestBody 加密)
前言服务器要求对请求进行sha1加密,请求用的Retrofit,所以要对请求的RequestBody进行加密获取shapublic class EncryptUtils { public static String getSHA(String info) { byte[] digesta = null; try {// 得到一个SHA-1的消息摘要...原创 2018-10-19 09:32:44 · 1529 阅读 · 0 评论 -
Android 验证邮箱、手机号是否有效
前言通过android的工具库Patterns类实现。实现验证邮箱Patterns.EMAIL_ADDRESS.matcher(email).matches();验证手机号Patterns.PHONE.matcher(email).matches();另外还支持IP、url等验证。...原创 2018-10-17 18:26:24 · 2569 阅读 · 0 评论 -
TBS腾讯(X5)内存泄露解决方案(com.tencent.smtt.sdk.WebView)
场景xml中使用com.tencent.smtt.sdk.WebView时,频繁进入退出,报出CommodityDetailActivity中的mFragments存在内存泄露。分析实际代码中CommodityDetailActivity类中,我自己没有用到mFragments,所以怀疑使用到的第三方搞的鬼,而这个页面第三方, 就有个腾讯的WebView。所以也就怀疑是这个问题了。把web...原创 2018-11-02 11:06:12 · 11094 阅读 · 0 评论 -
Android 自定义TextView 更改字体
Android 自定义TextView 更改字体前言步骤前言项目中经常使用到自定义字体,如果每个都在代码中进行设置,就会比较麻烦,所以采用在xml中直接自定以设置字体。最终调用效果: xmlns:app="http://schemas.android.com/apk/res-auto" //通过app:typeface 设置字体 <americanshop.com.amer...原创 2018-11-04 17:16:56 · 6770 阅读 · 1 评论 -
Gson 解析键值不固定的字段
前言开发中,有时候后台返回的json格式键值名是不固定的,如{ "red" : "1", "yellow" : "1" } , 可能只有red、yellow这两个键值名,也可能有好几个.解决方式这种情况下,我们可以声明为Map<String,String>,然后Gson就可以解析了。...原创 2018-11-04 17:29:46 · 1782 阅读 · 0 评论 -
App Bundle (Error while parsing the flags: Syntax error: flags should start with -- )
前言App Bundle 打出的.aab包,解析成apks格式时,报错,错误信息如下 Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 Error while parsing the flags: Syntax error: flags should start with -- (/app/release/release/a...原创 2018-11-15 10:00:18 · 1620 阅读 · 0 评论 -
RecycleView获取所有的ViewHolder
获取ViewholderRecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(index);如果holder为空的话,从缓存中取 //缓存池 RecyclerView.RecycledViewPool pool = recyclerView.getRecycledViewPoo...原创 2018-11-15 11:54:10 · 7431 阅读 · 0 评论 -
Room : Database Migration doesnt properly handle ALTER TABLE migration迁移失败
前言使用Room 数据库,进行升级时(增加新的列),报了Room Database Migration doesnt properly handle ALTER TABLE migration 这个错误,记录下解决过程解决流程确定版本号(VersionCode)是否增加了确定数据库版本(version)是否增加了如果数据库改变了,迁移是否做了如果增加新的列,不是TEXT 类型,如do...原创 2018-11-29 09:54:45 · 654 阅读 · 0 评论 -
图解Android消息传递机制(Looper、Handler、MessageQueue)
LooperLooper为消息循环器, 不停的取出MessageQueue中的消息,并把获取的消息分发下去。是MessageQueue和Handle交互的桥梁。提供prepare()方法prepare方法中通过sThreadLocal(new Looper()) 初始化了Looper, 并在Looper的构造方法中,new MessageQueue()创建了messageQueuelo...原创 2019-03-04 11:56:32 · 539 阅读 · 0 评论 -
图解Android启动模式
启动模式分类standard: 标准模式此为系统默认的启动模式,每次启动Activity均会新建一个实例。此种模式下,谁启动了它,它就加入谁的任务栈中。如:A 启动了 B,那么B就加入到A所属的任务栈中。 A和B的生命周期如下。非Activity的Context启动Activity,会报错,如下: Caused by: android.util.AndroidRuntimeE...原创 2019-03-09 21:03:32 · 150 阅读 · 0 评论 -
图解 Activity生命周期
Activity生命周期总概括onStart: 是从Activity是否可以见的角度来说,可见但不是前台onResume:是从Activity是否前台角度,普通情况周期流程第一次启动启动后退出(返回键)打开新的Activity如果新打开的Activity是透明主题,则不会调用onStop方法返回原来Activity特殊情况的流程A 打开 B,生命周期...原创 2019-03-07 16:04:40 · 181 阅读 · 0 评论 -
获取View宽高的四种方式(避免获取的为0)
前言在Activity获取控件宽高时,有时获取的为0,无法获取正确的信息,原因是View的measure过程和Activity的生命周期不是同步的,也就是说在Activity走了onCreate、onStart、onResume周期后,并不一定View能测绘完成。解决方式在onWindowFocusChanged方法中做监听 @Override public void o...原创 2019-03-11 17:07:27 · 1132 阅读 · 0 评论 -
Fabric 创建分组后,导致数据无法上报
问题项目换到Fabric另外一个分组后,导致数据无法上报。解决方式关闭XCode、模拟器从设备中删除App,并重启执行 rm -rf ~/Library/Developer/Xcode/DerivedData打开项目,并清理项目(⌘+Option+Shift+K)修改Fabric相关ID编译项目(⌘B)运行项目...原创 2018-07-27 12:03:15 · 317 阅读 · 0 评论 -
Java 接口 抽象类 选择
具体实现中接口优于抽象类。但是如果后期需要频繁的改动基本功能,就需要考虑使用抽象类,因为接口一旦改动会影响所有的实现,而抽象类可以避免这个问题。抽象类可以实现接口,进而结合两者的优点。...原创 2018-07-04 15:47:31 · 152 阅读 · 0 评论 -
锁屏中如何实现屏蔽home键
此方案,是为了锁屏做的。不适用于普通Activity的屏蔽home键。 方案一:监听onKeyDown事件@Override public boolean onKeyDown( int keyCode, KeyEvent event) { // TODO Auto-generated method stub if (keyCode == event. KEYCODE_HOME) {原创 2017-05-01 09:57:49 · 1761 阅读 · 1 评论 -
实现天气趋势图
先上张效果图这种趋势图,线条更圆滑些,个人感觉比那种折线效果要好。 这个界面我是封装了一个view,代码简单,废话不多,直接上代码。WeatherTempLineView.java/** * 天气趋势折线图 * */public class WeatherTempLineView extends View { // 用于控制曲线精细度,越大越精细 private stat原创 2017-05-01 10:37:03 · 1660 阅读 · 1 评论 -
RC4 加密解密
一般服务器端会进行Base64处理下,所以客户端也要先Base64解密后,再使用RC4解密。 如:服务器端先RC4加密,然后对其加密后的byte[]做Base64加密处理,所以客户端就需要先Base64解密,然后RC4解密,顺序不可颠倒。RC4加解密方法引用其他博客。public class RC4Encrypt { private final byte[] S = n...原创 2018-05-25 10:13:41 · 4677 阅读 · 0 评论 -
Button 一直显示在View的最上层,无法被其他View覆盖
问题Button一直显示在当前view的最上层,无法被其他view覆盖。解决方法XMLandroid:stateListAnimator="@null"Java button.setStateListAnimator(null); 此问题从5.0开始,stateListAnimator是用来实现Material Design 效果。...原创 2018-05-21 17:13:09 · 3569 阅读 · 0 评论 -
Retrofit2 + Rxjava2 报错 java.lang.IllegalArgumentException: Could not locate call adapter for
报错信息如下: java.lang.IllegalArgumentException: Could not locate call adapter for io.reactivex.Flowable…原因:没有为Retrofit设置AdapterFactory设置的AdapterFactory版本不对解决方法:添加依赖implementation 'com....原创 2018-05-25 11:27:06 · 3873 阅读 · 0 评论 -
Java 中枚举类型实现单例
从Java1.5开始,可以使用枚举类型实现单例。public class EnumSingleton { public static EnumSingleton getInstance() { return Elvis.INSTANCE.getInstance(); } private enum Elvis { INSTANCE; ...原创 2018-06-04 10:19:50 · 3693 阅读 · 0 评论 -
Rxjava2 线程切换
Rxjava2的线程切换使用subscribeOn、observeOn实现。subscribeOnsubscribeOn用于指定subscribe时,所处的线程,只可指定一次。 Flowable.create(new FlowableOnSubscribe<String>() { @Override public voi...原创 2018-05-28 10:14:30 · 2457 阅读 · 0 评论 -
Google play billing: Error refreshing inventory (querying prices of items). (response: 6:Error)
问题在内购测试中,发下一个错误 Error refreshing inventory (querying prices of items). (response: 6:Error)。 response: 6:Error 是:BILLING_RESPONSE_RESULT_ERROR,表示API 操作期间发生致命错误。解决方法检测网络是否翻墙Google Play商店是否能正常...原创 2018-06-04 12:09:28 · 1532 阅读 · 0 评论 -
Android SDK中找不到Google Play Billing Library
问题在做内购这块时,发现SDK中找不到Google Play Billing Library。 Android Studio的版本是3.1.2.解决方式一种折中的解决方式如下: 在GitHub中找到官网的demo:https://github.com/googlesamples/android-play-billing 在此demo中找到所需要的aidl文件。...原创 2018-05-28 15:01:23 · 3214 阅读 · 0 评论 -
Google 内购报错解决方式 (response: -1003:Purchase signature verification failed)
问题购买后,再次进行请求时,报错。 (response: -1003:Purchase signature verification failed)原因测试购买时,使用了android.test.purchased 进行购买。然后Security这个类,进行校验时通不过导致。 public static boolean verifyPurchase(String bas...原创 2018-05-29 17:10:35 · 2674 阅读 · 0 评论 -
SpringAnimation 实现菜单,从顶部弹出,从底部消失
前言实现一种菜单,菜单从顶部弹入,然后从底部消失,顶部弹入时,有一个上下抖动的过程,底部消失时,先向上滑动,然后再向下滑动消失。 效果图如下:引入依赖implementation 'com.android.support:support-dynamic-animation:27.1.1'创建SpringAnimation需要三个参数。做动画的View做动画的类型(...原创 2018-05-24 17:39:47 · 540 阅读 · 0 评论 -
Android Studio 3.0以后打包修改文件名方法
在android下添加如下代码 android.applicationVariants.all { variant -> variant.outputs.all { output -> def outputFile = output.outputFile ...原创 2018-06-13 20:27:36 · 1522 阅读 · 0 评论 -
RecycleView 的单个Item,addOnPreDrawListener监听导致的内存泄露
问题调用notifyDataSetChanged()方法,导致内存急速上涨OOM。原因单个Item的view界面,在构造函数里,做了一个addOnPreDrawListener监听,如下view.getViewTreeObserver().addOnPreDrawListener( new ViewTreeObserver.OnPreDrawList...原创 2018-06-07 11:25:27 · 2425 阅读 · 0 评论