- 博客(51)
- 资源 (5)
- 收藏
- 关注
原创 Android ListView ClassCastException
前言8012年了,在Android开发中,还是避免不了使用 ListView,通过 addFooterView 去添加底部视图,UI刷新时,又通过 removeFooterView 去移除旧的视图,在Android 4.3版本及以下 removeFooterView 时,发生闪退,日志如下:com.company.adapters.MyAdapter cannot be cast to...
2018-08-17 19:32:22
444
原创 Android PathClassLoader 和 DexClassLoader 区别之源码分析
前言一般说起 PathClassLoader 和 DexClassLoader ,大家都会说,前者只能加载内存中已经安装的apk中的dex,而后者可以加载sd卡中的apk/jar ,因此 DexClassLoader 是热修复和插件化的基础。但是具体为什么DexClassLoader能加载sd卡中的类,很多文章都只是一笔带过 ,于是研究了下源码,做个记录。【注意】本文所参考的源码基于And...
2018-08-14 16:22:29
5169
5
原创 React-Native 使用 ScrollView 简单实现 Banner 功能
前言遇到一个需求,需要做到一个2行列表的滑动,并且要求有底部的指示器,实际就是一个 banner ,由于原本代码是每行4个,分成2行,无法滚动,现在要在原有基础上改造成一行5个可滚动,故而没有大动代码,只是在外层嵌套 ScrollView ,利用滚动的属性模拟出了 banner 的效果:实现初始偏移量方案的主要思路在于 ScrollView 的滚动监听,每次滚动开始之前...
2018-08-09 18:27:52
1460
原创 Kotlin空安全最佳实践
Kotlin 空安全最佳实践前言Kotlin 语言在设计时,重点关注了Java 的空指针异常(NullPointerException,简称NPE),然而在使用时,由于NPE出现的原因及其多样化,对应的处理方式也有很多种,很多时候单靠一个variable != null不能优雅地解决所有问题,在不同场合,我们可以通过不同的方式,来简化书写,明确语义。Kotlin 产生 NPE ...
2018-07-05 11:30:57
1009
原创 WebView 使用Android 原生ToolBar
WebView 使用Android 原生ToolBar前言在使用 WebView 加载 H5 页面的时候,很多H5页面会有自己的标题栏,然而原生APP中也会有自己的标题栏。很多应用为保证标题栏风格与原生应用统一,或者保证返回键的使用能自由控制,选择使用原生的 ToolBar 来作为页面的标题栏。使用原生标题栏要解决的问题为避免出现两个标题栏,需要隐藏H5自带的标题栏;原...
2018-06-06 17:39:25
1527
原创 Java 中的栈-Stack类源码解读
Stack继承自Vector,实现了栈元素的基本操作,最典型的就是push压栈和pop出栈,整个Stack.java的代码很简单:public class Stack<E> extends Vector<E> { public Stack() { } /** * 压入一个元素入栈,实际就是调用Vector的addElement方法...
2018-04-09 02:22:34
1687
原创 Activity启动
根Activity启动App安装时,PMS会解析AndroidManifest.xml,拿到组件信息。Launcher从PMS中拿到action为android.intent.action.MAIN并且category为android.intent.category.LAUNCHER的Activity信息并为他们创建桌面图标。<activity android:name=".Main...
2018-03-26 23:59:47
184
原创 从源码追踪OkHttp的请求流程
从实际使用开始OKHttp请求分为同步和异步,同步写法和异步写法分别如下:OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url("http://www.baidu.com").build();Call call =client.newCall(request);//...
2018-03-15 15:56:20
207
原创 Java对象实例化过程
Java对象初始化过程 参考自 http://blog.csdn.net/wang_1997/article/details/52266954先声明对象:class Student { String name = "Alice";//显示初始化 int age = 18; //显示初始化 public Student() { name...
2018-03-13 11:25:39
2691
原创 AIDL学习笔记
简介最近重温了下开发艺术探索里面的IPC机制,对于AIDL做下笔记使用时,客户端定义AIDL接口方法package com.lpc.aidltest;// Declare any non-default types here with import statementsimport com.lpc.aidltest.Book;interface IBookInterface ...
2018-03-13 00:26:03
241
原创 Bitmap和OOM笔记
Bitmap获取宽高Bitmap获取宽高有2种方式,第一种是直接将Bitmap加载进内存中,然后通过测量拿到宽高。private void getBitmapWH() { Bitmap bitmap = BitmapFactory.decodeFile("file/img.jpg"); int width = bitmap.getWidth(); int heigh...
2018-03-08 23:05:54
226
原创 Activity启动模式
Activity的启动模式Activity有4中启动模式,standard、singleTop、singleTask、singleInstance,可以通过AndroidManifest里面activity标签下的launchMode来设置,或者在代码中通过Intent的Flag参数来设置。standardstandard是默认的启动方式,每次启动Activity都会创建一个新的实例。...
2018-03-08 20:52:55
190
原创 Java基础(二)
Java基础(二)1、哪些情况下的对象会被垃圾回收机制处理掉?讲一下常见编码方式?utf-8编码中的中文占几个字节;int型几个字节?静态代理和动态代理的区别,什么场景使用?Java的异常体系谈谈你对解析与分派的认识。修改对象A的equals方法的签名,那么使用HashMap存放这个对象实例的时候,会调用哪个equals方法 ##?J...
2018-03-08 11:52:48
614
原创 Java线程同步笔记
线程同步多线程情况下,当一个线程使用某一资源时,其他线程无法同时使用此资源,直到当前线程释放对资源的占用。例如A线程使用对象X时,其他线程都无法操作X,直到A线程使用完毕。 https://www.cnblogs.com/XHJT/p/3897440.html实现方式:1、通过synchronized关键字修饰方法或者代码块://同步普通方法//同步静态方法时,...
2018-03-08 01:07:10
263
1
原创 Java基础(一)
(一) java基础知识点java中==和equals和hashCode的区别答:对于Java基本类型,== 判断的是值,对于对象,==判断的是对象地址,一般情况下,equals和==一样, 因为对象的equals方法直接就是判断是否==,也是判断的对象引用地址。 public boolean equals(Object obj) { return (this =...
2018-03-07 00:39:19
222
原创 Android消息机制源码简析
简介Android应用程序通过消息驱动,在线程间的通信中,通过Handler、Looper、MessageQueue来实现消息的传递和处理。在使用时,一般我们会用Handler handler = new Handler(); 在当前线程(一般是UI线程)创建一个Handler对象; 然后,通过在其他线程里使用handler.sendMessage(message) 来发送消息给当前线程...
2018-02-27 23:33:09
455
原创 retrofit 2.3.0 接入和使用
前言开门见山,本文记录了如何接入并使用square出品的retrofit网络框架。一、准备工作添加retrofit 的依赖(或直接使用jar包)这边并不能直接连接网络,所以直接下载jar包并使用了添加okio依赖或引用jar包 添加jar包之后,还要添加okio的jar包,不然会报错java.lang.NoClassFoundError:okio.Buffer添加converter-gso
2017-05-18 22:34:52
1317
原创 Android Util工具类的封装
摘要本文总结了过往项目和一些资料上的Android 工具类的封装,既当做是总结,也作收集收藏用。感谢网络上诸方资料。SharedPreferences工具类:SPUtil.javapublic class SPUtil { public static final String FILE_DEFAULT = "default"; public static int getInt(Stri
2017-04-08 14:13:00
2042
1
原创 Android 页面异常显示的简单封装
摘要一般来说,进入一个页面大都会请求网络,请求网络便会有各种异常,比如返回数据为空、服务器异常、参数错误,等等…那么页面在得到这些返回结果后,总会要有个反馈,用来显示给用户,总不能所有的异常都用Toast来显示吧,所以界面还是要有的。 那么界面显示在哪里呢?一般一个页面会有标题栏,标题栏下面是内容,然后有的还会底部栏,标题栏和底部栏总不能被异常界面遮住,所以要展示异常的地方,必须是页面的正文部分。
2017-04-08 14:09:20
5848
原创 apk重新签名
摘要上线到应用市场时,可能会出现需要重新签名的情况,比如360加固后需要重签名,整理了下网上的资料,记录在这里便于查阅:apk重新签名步骤: 将apk文件放到某一目录下,改成.zip或者.rar文件,删除里面的META-INF文件夹,再改成.apk文件 然后将keystore文件复制到同级目录下,然后运行:jarsigner -verbose -keystore appkey.keystore
2017-04-08 14:07:33
678
原创 Android ToolBar的封装
摘要现在开发的项目中,发现需求里面,既有“返回图标-标题文字”类型的普通toolbar,也有“返回图标-标题文字-菜单图标”和“文字-标题文字-文字”这种类型的,也就是说,Toolbar的左边和右边都有可能是文字或者图标,而中间一般都是标题,所以寻思着封装下toolbar,使之能适应这种需求。正文要做的东西很简单,就是自定义一个布局,然后左边放一个ImageView和一个TextView,中间放一个
2017-04-08 14:03:24
1271
1
原创 Android 基类BaseActivity的封装
摘要本篇总结了前人写的BaseActivity,自己在开发过程中也添添补补,删删改改,现在总结下。本篇很多知识借鉴和学习了知乎上iYng大大的回答,先感谢一波。顺便上原文链接: https://www.zhihu.com/question/47045239/answer/105086885正文一般来说,不同的项目的BaseActivity不尽相同,根据不同的业务逻辑和功能需求,会有很多区别。这里总
2017-04-08 14:01:20
13283
4
原创 Android蓝牙使用(一)
Android通过BluetoothAdapter来检测蓝牙状态,打开或关闭蓝牙,扫描蓝牙并得到蓝牙信息等功能。 在使用时,通过BluetoothAdapter.getDefaultAdapter()方法来获取系统的BluetoothAdapter,如果系统支持蓝牙则会返回实例,如果不支持,则返回空;写个简单的demo来看看吧:先在MainActivity.class 中定义BluetoothAd
2017-04-05 13:51:06
1392
原创 Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
与“Manifest文件中忘记注册Activity”不同,这个错误发生的原因之一,应该是Manifest文件里有注册activity名字,但是要么名字路径错误(比如在其他访问不到的地方如拷贝代码却忘记添加代码所需的jar包,或者没有使用完整路径的包名),要么就是该Activity类不是什么正经类,比如我这边误操作,不小心把activity设置成abstract类型的 ,然后就无法实例化,所以star
2017-01-07 09:41:07
588
原创 OkHttp框架二次封装,post json格式的参数(下)
没看过上篇的,建议先看上篇,传送门:http://blog.csdn.net/black_dreamer/article/details/53068620响应数据的格式服务器响应的数据,结构也大都固定,比如:{"result": { "total": 0, "data": { "uid": 9527, "token": "xxxxxxxxxxxxx"
2016-11-07 18:06:48
2263
原创 OkHttp框架二次封装,post json格式的参数(上)
OkHttp框架二次封装,post json格式的参数(上)请求的封装本篇主要是针对后台数据格式,进行请求参数的封装。封装的目的,是为了配合后台的数据结构,方便客户端进行数据的请求和响应数据的处理。数据请求的格式数据请求的请求以Json格式传递参数到服务器,在本例中,参数分为了公参和私参,请求体结构如下:{ "args": { "pri_args": {
2016-11-07 18:05:56
7427
原创 Okhttp框架的二次封装,post json格式的参数
公司项目后台请求,需要上传json格式的参数,本打算直接使用鸿洋(博客)大大封装的okhttp-utils,但是发现大大虽然封装了表单的post,但是没有json的(可能我眼瞎没看见),所以还是需要根据公司具体的参数结构,进行二次封装。 比如参数如下:{ args: { pub_param:{ "username":"old wang",
2016-11-04 15:26:30
1290
原创 Activity次级页面和主页间来回跳转,防止重复创建Activity实例
很多时候,在进入详情页或次级页面的时候,最后会返回到上一个Activity。在返回时,一般用Intent去启动。但是如果单纯地使用Intent intent = new Intent(A.this, B.class) ;startActivity(intent) ;你会发现,多次地从A进入B,又从B回到A,然后这两个Activity就会一直创建。打log发现两个Activity的onCreate方
2016-07-24 17:50:29
6553
1
原创 jsp img标签显示本地文件夹图片
在Idea的Web项目中,从本地文件夹获得图片可以使用虚拟目录,步骤如下:任意地方建一个图片文件夹pictures,里面放图片: 在run菜单里选择Edit configurations: 在Deployment下选择“+”,External Source 选中新建的文件夹,作为关联的目录 选中添加的picture,在Application context里添加虚拟的目录名,随意写都行,这里用pi
2016-07-19 14:55:49
3501
原创 Android Fragment + ViewPager +LazyLoad的应用
最近看到一篇微信文章,讲的是ViewPager + Fragment的懒加载。博主以前也遇到过这样的问题,要在APP启动的时候判断从网络获取的一个字段,来确定是否隐藏一个列表的item,当时直接在主Activity里获取字段,然后设置item显示状态,结果发现每次服务器动态改变字段后,APP根本不按照字段来显示/隐藏item,打log后发现在进入APP的时候,ViewPager的预加载属性在捣鬼,主
2016-07-18 21:06:35
1259
原创 React-native ListView不滚动
发现ListView里的数据,即使溢出了屏幕,也还是不滚动,查了资料,发现contentContainerStyle这个样式里,不能设置flex: 1 ,否则不会滚动。 参见: http://stackoverflow.com/questions/32874559/listview-fails-to-scroll
2016-07-15 09:32:32
4763
原创 React-native ListView 必须点击屏幕才会加载数据
最近在改动ListView时发现ListView数据不是在进入界面之后就加载出来,而是要点击屏幕之后才会加载数据,很怪异的bug。 首先函数是这么写的:在fetchInfo()里去获取服务器里的个人信息,然后再设置到页面。整理之后发现还是逻辑问题,以后得多注意思维清晰。fetchInfo() { if(!this.state.fetched) { var b
2016-07-13 23:28:55
4255
2
原创 React-native项目改包名
应公司开发规范需求,项目报名必须以公司反向域名为基础,于是大费周章改包名,整理例子如下: 1、新建文件夹test,把原来的包放进去 pre: 改路径之后(com文件夹和changename文件夹之间添加了一个test文件夹): 2、AndroidManifest.xml 把com.changename改成com.test.changename 3、MainActivity.jav
2016-07-13 23:24:32
4462
1
原创 React-native植入原生Android应用
首先按照React Native的官网上所说的步骤来。 注意事项 1. 一些其他文件: curl -o .flowconfig https://raw.githubusercontent.com/facebook/react-native/master/.flowconfig 上面的这个语句,其作用只是新建了一个.flowconfig文件,这些文件可以直接从其他RN项目里拷贝,如下图:
2016-07-13 23:18:00
1419
原创 React-native设置全局函数globle【适用于有组件嵌套时】
APP的首页App.js里,根据logFlag的值来判断渲染的内容是登录页面还是首页: 以前的逻辑是在MyInfo.js文件里的注销按钮里设置isLogin为false,然后跳转到App.js,App.js判断isLogin为false,设置this.state.logFlag为false,然后渲染出组件,即显示出了登录界面。但是问题出现了,当在登录界面登录成功后,默认的逻辑是跳转到App.j
2016-07-13 23:07:53
8154
原创 Java端和JS端的AES加密解密同步
Java端和JS端的AES加密算法同步 公司要求登录时用户名和密码必须先加密,再将数据发送到服务器。由于这种加密必须要求是可逆的,所以不能用MD5来加密,MD5不是可逆的。后台选择了用AES加密。然后问题就是如何跟公司的Java算法得到同样的结果。 后来在搜寻了很多算法后,发现了解决方案,改动公司的算法,然后就可以轻松匹配了。 • Java端的算法:import javax.crypto.Ci
2016-07-13 23:02:53
10889
1
原创 React-native listview换行
先看看ListView的代码,其布局style为list: 布局list才是关键: 在list中设置整个ListView的 的宽度为屏幕的宽度(通过Dimendions.get方法来获取),ListView的 contentContainerStyle 里设置的是Item的显示方式,通过flexDirection来设置Item以列(row)的方式渲染出来,然后设置其width属性为跟屏幕
2016-07-13 22:59:49
4578
4
原创 React-native中DatePickerAndroid的使用
在react native中,用DatePickerAndroid来打开系统的日期选择器,上图: 关于async和await,见阮一峰老师的日志: http://www.ruanyifeng.com/blog/2015/05/async.html不同的手机系统上显示的new Date()是不同的,有的显示的是:2016/4/15,有的是04/15/16,所以将时间用toLocalString()
2016-07-13 22:52:56
6861
原创 React-native fetch请求网络
开始的服务器直接传的字符串,所以这边用POST去请求,直接连接字符串LOGIN_REQUEST= LOGIN_URL +'?loginName='+uName + '&password='+uPwd; fetch(LOGIN_REQUEST,{ method: 'POST', header: { 'Aceept': 'application/json',
2016-07-13 22:44:40
4958
1
Android Fragment + ViewPager
2016-07-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人