Android
文章平均质量分 75
OneXzgj
这个作者很懒,什么都没留下…
展开
-
移动端 [Android & iOS] 压缩 ECDSA PublicKey
使用 Android KeyStore 和 iOS 的 Secure Enclave 提供的安全能力使用 P-256 来对 API 请求进行签名,服务器端再进行验证。但是发现不论是 iOS 还是安卓都没有提供一个便捷的方式从 iOS 的SecKeyCopyExternalRepresentation(SecKeyCopyPublicKey) 和 Android 的 KeyPair 中得到 33-bytes 的 compressed public key。原创 2023-09-27 11:11:04 · 907 阅读 · 0 评论 -
kotlin常见函数let,with,run,apply,also的使用
目录一、 let关键字的使用二、内联函数with三、内联扩展函数之run四、内联函数apply五、内联扩展函数之also六、let,with,run,apply,also函数区别一、 let关键字的使用let扩展函数的实际上是一个作用域函数,当你需要去定义一个变量在一个特定的作用域范围内,let函数的是一个不错的选择;let可以配合可空性 “?”来使用,如果data=null 则不执行le...原创 2020-03-17 11:43:38 · 3656 阅读 · 1 评论 -
Okhttp之BridgeInterceptor拦截器解析
如果研究过okhttp源码,应该知道okhttp的核心是拦截器,而拦截器所采用的设计模式是责任链设计,即每个拦截器只处理与自己相关的业务逻辑。之前已经分析了Okhttp的RetryAndFollowUpInterceptor的原理。拦截器的核心代码都在intercept(Chain chain )方法中,所以有必要彻底研究该方法是如何处理即可理解BridgeInterceptor的作用和实现。...原创 2018-12-20 16:40:16 · 365 阅读 · 0 评论 -
Okhttp之RetryAndFollowUpInterceptor拦截器原理解析
如果研究过okhttp源码,应该知道okhttp的核心是拦截器,而拦截器所采用的设计模式是责任链设计,即每个拦截器只处理与自己相关的业务逻辑。今天彻底分析Okhttp的核心拦截器RetryAndFollowUpInterceptor的原理解析:这里先贴出RetryAndFollowUpInterceptor的核心伪代码,可以大体的看一遍,待下文一步一步带你解析。拦截器的核心代码都在inter...原创 2018-12-20 14:30:34 · 1578 阅读 · 1 评论 -
解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle
最近可能是升级 Android Studio到版本3.2.1,检出自己原来的GitHub项目,gradle了好了好几次,但都是会报如上的错误Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in GradleLearn about configuring HTTP pr...原创 2018-12-02 19:52:30 · 7326 阅读 · 0 评论 -
今日头条适配方案解读及常用适配方案总结
Android屏幕适配方案:在了解适配方案之前,先来一遍dp,dpi,density概念吧!px : 是pixel的缩写,pixel即像素,平时所说的设备的分辨率是多少,这里的单位就是px。dp: 指的是设备独立像素,以dp为尺寸单位的控件,在不同分辨率和尺寸的手机上代表了不同的真实像素,比如在分辨率较低的手机中,可能1dp=1px,而在分辨率较高的手机中,可能1dp=2px。或者是1dp=...原创 2018-11-13 10:54:53 · 3584 阅读 · 0 评论 -
Successfully created project on GitHub but initial push fail Could not read from remote repository.
最近由于给电脑升级,重新搭建了开发环境,但是Android studio 在分享项目到github上时,出现如下异常:14:31 Can't finish GitHub sharing process Successfully created project 'todo_mvvm' on GitHub, but initial push failed: Could not read fr...原创 2018-10-25 15:40:46 · 323 阅读 · 0 评论 -
TODO 最适合练习主流框架的应用
目录1、应用介绍:2、用到的第三方库:3、Apk下载4、项目运行截图5、关于我:6、项目地址:1、应用介绍:使用MVP+Dagger2+Retrofit+Rxjava2+RxLifecycle+ARouter框架构建虽然项目很小,但五脏俱全,很适合学习!接口和服务器是鸿洋大大提供在http://www.wanandroid.comAPI地址: http://www.wanandroid....原创 2018-09-30 09:56:43 · 1099 阅读 · 0 评论 -
RuntimeException: com.android.builder.dexing.DexArchiveMergerException: Unable to merge dex解决方法
在Android开发过程中都避免不了要集成第三方的项目、集成完之后今天碰到这个令人我非常不开心的transformClassesWithDexForDebug Exception、详细的Log如下:Error:java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: com.andr...原创 2018-09-06 14:48:48 · 4667 阅读 · 7 评论 -
Okhttp之CacheIntercepter原理及缓存配置
一、 HTTP缓存技术介绍在探究Okhttp的CacheIntercepter原理之前,先简单概述一下http的网络缓存相关知识,方便阅读本文。以请求https://github.com/为例可以看到返回的response中有许多头信息,但是暂时只需要关注Cache-Control和Last-modified这两个字段,因为它俩是控制要不要缓存当前内容。简单介绍一下作用:1.Cach...原创 2019-01-17 14:19:14 · 455 阅读 · 0 评论 -
Okhttp之ConnectInterceptor拦截器原理及解析
因为Okhttp中拦截器都是责任链设计模式,这里直接看intercept()方法即可,先来献上高清无码图,方便更好的理解其原理。1. ConnectInterceptor核心代码: @Override public Response intercept(Chain chain) throws IOException { RealInterceptorChain realChain ...原创 2019-01-18 14:55:08 · 797 阅读 · 0 评论 -
Okhttp之CallServerInterceptor拦截器原理及解析
在开始之前拓展一个http的知识:1、关键字100-continue介绍http 100-continue用于客户端在发送POST数据给服务器前,征询服务器情况,看服务器是否处理POST的数据,如果不处理,客户端则不上传POST数据,如果处理,则POST上传数据。在现实应用中,通过在POST大数据时,才会使用100-continue协议。2、客户端策略如果客户端有POST数据要上传,可...原创 2019-01-19 16:38:57 · 437 阅读 · 0 评论 -
Android插件包换肤(高仿网易云音乐换肤)
高仿网易云音乐换肤,插件化下载皮肤包,无需Activity的重启直接实现无缝切换。先看看效果图:由于gif大小有限制,可以扫描二维码,安装体验先简单描述一下网易云音乐换肤的大体过程:1.先去下载一个主题包,这个主题包其实是一个apk文件,里面包含要换皮肤的资源文件2.通过AssetManager,通过反射以及PackageName,获取到下载下来皮肤包的Resource,拿到Reso...原创 2019-01-16 11:24:53 · 1246 阅读 · 0 评论 -
整合SQLCipher工具到LitePal数据库框架实现数据库加密解密
1.去GitHub上下载LitePal源码:传送门解压下载文件,如下所示:2.删除无用文件,选择自己需要的文件因为自己的项目是java编写的,所以不需要kotlin,download中是以前版本的jar文件,sample则是使用示例,这些都用不到,所以可以直接删除。如果你还不了解LitePal的使用,传送门3.导入源码到工程:打开Android studio 选择File - &gt...原创 2019-03-13 16:12:22 · 651 阅读 · 0 评论 -
组件化开发之旅
在介绍如何实现组件化的开始前,先介绍一下组件化与插件化插件 : 指的是单一功能的组件,或是抽出来的widget等,如支付模块,路由模块,定位模块等。模块 :指的是独立的业务模块,如常见App中的首页模块,直播模块,商城模块等。区别 :组件化更偏向于功能的封装,插件化偏向于业务的模块。一、库工程和module的区别先来简单介绍一下Android依赖库和Android Project的区别,...原创 2019-04-20 17:58:49 · 207 阅读 · 0 评论 -
Retrofit源码详细解析
1.Retrofit中的create()方法分析 public <T> T create(final Class<T> service) { //.... return (T) Proxy.newProxyInstance(service.getClassLoader(), new Class<?>[] { service }, ...原创 2019-05-05 22:00:40 · 389 阅读 · 0 评论 -
GreenDao出现异常WARNING: API 'variant.getJavaCompiler()'
文章目录1.问题描述2. 解决方法:1.问题描述使用GreenDao出现如下异常WARNING: API ‘variant.getJavaCompiler()’ is obsolete and has been replaced with ‘variant.getJavaCompileProvider()’.这个原因是因为你Gradle版本高或者不稳定导致的,可以通过降低Gradle版本就可...原创 2019-08-29 17:22:30 · 886 阅读 · 0 评论 -
Android 获取 usb 权限
文章目录前言:一、直接在AndroidManifest.xml文件中进行如下配置:二、动态代码获取2.1 代码中获取(前提是已经定位到要申请USB权限的usbdevice)2.2 注册广播接受者前言:最近工作上遇到几个USB模块在android平台上适配使用的情况,所以要用到USB权限获取问题##USB权限获取有以下2种方式:一、直接在AndroidManifest.xml文件中进行如下配...原创 2019-10-07 10:24:01 · 9772 阅读 · 0 评论 -
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $
今天在开发中遇到一个这样的错误,找了半天,记录一下解决方法:1、出现的场景在请求网络时候用的Retrofit,然后需要定义一个接受返回数据的bean,因为是POST请求,所以第一次请求并不知道返回的数据结构,所以我直接将返回的数据泛型定义为String类型,于是就出现了如下异常信息java.lang.IllegalStateException: Expected BEGIN_ARR...原创 2018-08-22 10:54:51 · 13099 阅读 · 0 评论 -
RecycleView的notifyDataSetChanged()方法无效
有几种情况会进行刷新数据无效1、数据源前后地址不一样一般我们使用构造进行数据源的传递,或者是封装的CommonAdapter进行数据源的传递,或者是通过依赖注入框架进行,将数据源进行传递到Adapter中,一般容易在这种情况下出现notifyDataSetChanged()方法无效,解决的方法是: 定义一个成员的数据源的变量接受构造传入的数据,将构造传入的数据进行mData.addA...原创 2018-08-07 09:05:06 · 2829 阅读 · 0 评论 -
RxPermissions、RxBidnding、Rxjava2简单总结
RxPermissions总结Rxjava中知识点总结Subscriber和Observer接口的区别:在RxJava2版本中2.1.11中没有区别 &lt;–特别注意:2种方法的区别,即Subscriber 抽象类与Observer 接口的区别 –&gt;1、 相同点:二者基本使用方式完全一致(实质上,在RxJava的 subscribe 过程中,Obser...原创 2018-05-13 15:52:43 · 949 阅读 · 0 评论 -
Android属性动画的简单使用方法
import android.os.Bundle;import android.animation.AnimatorInflater;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.app.Activity;import android.view.Menu原创 2016-10-21 19:36:00 · 211 阅读 · 0 评论 -
Android中广播接收者BroadcastReceiver使用
BroadCastReceiver的使用分为两部分1、接受系统发送的广播新建一个类实现BroadCastReceiver ,并实现重写onReceive()方法//检测系统的sd卡是否挂载 public class SdCardBroadcastReceiver extends BroadcastReceiver { @Override public void原创 2016-10-19 17:16:31 · 419 阅读 · 0 评论 -
Android内存图片缓存
public class ImageCacheUtils { private static final String TAG = "ImageCacheUtils"; public static final int SUCCESS = 100; public static final int FAIL = 101; private Context ctx; /原创 2016-10-20 21:11:34 · 228 阅读 · 0 评论 -
ScrollView中嵌套ListView中ListView中显示不全解决方法
先看看布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"原创 2017-03-17 16:37:18 · 305 阅读 · 0 评论 -
MaterialDesign(完整)带你体验艺术般交互体验
1.Toolbar的使用详解2.NestedScrollView配合其他控件的使用3.CollapsingToolbarLayout配合ToolBar的使用4.AppBarLayout配合Materil-design的使用5.CoordinatorLayout的使用6.DrawerLayout的滑动菜单的使用原创 2017-12-22 16:17:35 · 1004 阅读 · 0 评论 -
Android Studio中查看类和接口被哪些子类实现的快捷键
如果你使用的是Android Studio中默认的快捷键方案的话,我们通过查看“File”->”settings” ->”keymap” ->在快速搜索栏中输入“imp”可以看出快捷键是 Ctrl+alt +B 或者同时按住ctrl +alt +鼠标左键在Eclipse中的快捷键是 Ctrl + T原创 2017-12-25 08:59:37 · 18078 阅读 · 2 评论 -
自己实现RecycleView加载更多视图(状态)
关于RecycleView实现上拉加载更多的思路和方法,我相信每个人都有那么几套, 比如我 1、使用的是 BaseRecycleViewAdapterHelper 因为这个库真的帮助我们实现了好多的东西,结合Rxjava+Retrofit在项目中的使用,在不同的状态进行处理不同的业务逻辑,所以这个Adapter已经完完全全的实现了。 2、最开始选择这个库的原因是:里面可以通过几句代码实现it原创 2017-11-06 16:56:15 · 1987 阅读 · 1 评论 -
Thread.UncaughtExceptionHandler获取应用的crash信息
在日常开发中,避免不了程序出现crash,即“崩溃”,但是如果这些crash不及时的解决,很大程度的会影响用户的体验,那么我们该如何解决这些crash的信息呢?其实在Android系统中,我们可以通过Thread.UncaughtExceptionHandler来监视应用的crash信息,给程序设置一个Thread.UncaughtExceptionHandler监听原创 2017-12-27 11:00:40 · 369 阅读 · 0 评论 -
用Materail Design设计实现悬浮的Tablayout列表悬停效果
首先看看效果图: 悬浮的tablayout的效果,常规实现方式:整体采用的是ScrollView的滑动,通过监听ScrollView的滑动,然后根据一个特定的高度进行控制预先设置好的View的隐藏和显示,然后达到悬浮的效果,我们则是通过Materail Design新控件去实现悬浮的Tablayout,原创 2017-12-27 15:13:38 · 823 阅读 · 0 评论 -
使用Alibaba开源库vLayout实现淘宝首页
按照自己之前写简书的习惯,先上效果图:(图片素材来自于淘宝手机客户端) 在研究具体的使用的时候,先看看官方对于vLayout 的介绍和使用方法: vLayout的官方地址: https://github.com/alibaba/vlayout官方的介绍:通过定制化的LayoutManager,接管整个RecyclerView的布局逻辑;LayoutManager管理了一系列L原创 2018-01-04 15:18:00 · 6592 阅读 · 4 评论 -
Cannot find AVD system path. Please define ANDROID_SDK_ROOT
解决Android studio中启动不了AVD 的解决方法! 好长一段时间没有用过Android studio中的自带的模拟器,最近想开一个玩玩,发现每次我创建完以后,点击启动按钮时,下面会提示一下 launch this avd 按钮(绿色按钮) 就会出现下面的这个进度条: 然后就没有任何的反应,我用过好几种方法,都没有解决,具体的就不在这里做阐述了,但是当我打开Eve...原创 2018-01-28 22:16:25 · 68894 阅读 · 11 评论 -
快速入门Dagger2
1、Dagger2的介绍和简单使用:A fast dependency injector for Android and Java. 一个快速的依赖注入库为java和android, 什么是依赖注入?有兴趣的同学可以看一下我之前转载的一篇依赖注入的文章。 https://github.com/google/dagger 这是Dagger2的github地址,里面介绍了在项目中如何使用和...原创 2018-03-18 18:17:16 · 195 阅读 · 0 评论 -
依赖注入原理
0. 前言在软件工程领域,依赖注入(Dependency Injection)是用于实现控制反转(Inversion of Control)的最常见的方式之一。本文主要介绍依赖注入原理和常见的实现方式,重点在于介绍这种年轻的设计模式的适用场景及优势。1. 为什么需要依赖注入控制反转用于解耦,解的究竟是谁和谁的耦?这是我在最初了解依赖注入时候产生的第一个问题。下面我引用Marti...转载 2018-03-06 09:40:53 · 495 阅读 · 0 评论 -
判断ImageView当前的图片是哪个图片,然后比对资源文件
描述一下需求:我们在点击一个ImageView的时候进行,切换背景,或者是资源文件的时候,我们需要根据拿到的背景进行比对,(试了好几种方法,总是出现一些小毛病) 例如:**网上的某某人写的这种:**if (image1.getDrawable().getCurrent().getConstantState().equals(getResources().getDrawable(R.dra...原创 2018-03-23 10:26:46 · 5730 阅读 · 3 评论 -
Retrofit详细使用及文件上传下载(前后台详细实现)
在开始之前,本片文章使用得是Rxjava和retrofit结合,介绍的文件的上传和下载的实现,如果还不太了解和使用Rxjava和Retrofit的基本使用的同学,可以先了解完这部分内容以后,在阅读本篇文章。retrofit的注解字段的介绍和使用:1.@GET请求的参数解析:标记是GET请求。 /** * 首页Banner * http://www....原创 2018-03-20 16:39:39 · 1890 阅读 · 0 评论 -
ARouter路由框架解析
一、ARouter介绍及主要应用场景:1、介绍:是ARouter是阿里巴巴开源的Android平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用。2、原生的路由方案存在的问题首先谈一谈原生的路由方案存在的问题以及为什么需要路由框架。我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖...原创 2018-04-01 14:23:03 · 3409 阅读 · 0 评论 -
View的绘制流程和底层代码的理解和实现过程
View的绘制流程和底层代码的理解和实现过程文章目录View对象的绘制分为3个步骤onMeasure()和onLayout()的作用测量View的三种模式父类View中对应这个三个方法底层实现使用过程中使用到的一些常用的API 的总结View对象的绘制分为3个步骤1.第一步:protected void onMeasure(int widthMeasureSpec, int heigh原创 2016-09-23 00:50:23 · 401 阅读 · 0 评论