合作方页面能在浏览器中打开,不能在我们的WebView中打开,运营打上门来。
作为一个有态度的码农当然是要怒回去的。于是调试看了对方h5报错如下:
Activity调用外部为WebView设值不成功问题解决
简单的Android保存恢复数据,有很多app没有做到。如之前提到的知名APP掘金v3.1.1,以及朋友公司的书香云集v5.40.1,基本每去一家公司都会要为公司产品检查修改此类问题。本以为自己是这方面的老司机,没想到最近同事反馈上来又有此类问题发生,而这次的问题却是与我有关。
16年9月开始负责重构马上金融2.0,其中一项重要功能是hybrid资料表单以适应风控频繁变化的需求。采用jsbridge动态写入js解决js与native相互调用的安全性,此次按下不表。问题发生在表单中js调用android访问联系人,获取联系人数据调用js设置时不成功
原因
还原代码
MainActivity implements RestoreActivityResultCallback
301重定向导致不能正常访问
事件通报中称由于挂维护跳转301后,恢复服务,app WebView访问缓存仍然停留在公司官方网页,无法正确访问。
参考Http Status Code Definitions
究其原因可以知道默认情况下大家都必须遵守规范,才能不乱,并在这套规则中永久玩下去。
如果遇到类似情况,直接分析请求头
如何主动PUSH SDK更新给开发者
之前苹果禁用jspatch时,涉及到的SDK全部需要更新。此时开发者得全面排查所使用SDK是否需要更新。怎么查?一个一个去SDK官网查看是否有更新解决方案。啰嗦,实现上就是想维护Github上面可怜的Star,所以想利用Github的开放api更新了SDK给他们发个邮件
1、查询Star的api
文档:https://developer.github.com/v3/activity/starring/
调用:https://api.github.com/repos/2tu/fit/stargazers
发现只有user,没有其邮箱
2、查询用户信息
文档:https://developer.github.com/v3/users/
调用:https://api.github.com/users/2tu
发现并没有想要的email,提示如下:
Note: The returned email is the user’s publicly visible email address (or null if the user has not specified a public email address in their profile). The publicly visible email address only displays for authenticated API users.
只能显示用户自己的email,虽然可以通过爬虫直接爬取,但是不正当,该想法搁置
一个万能算法压缩所有图片?
图片越来越多,相素越来越高,导致越来越大的图片必然绕不开压缩。
作为基础功能的图片压缩,本身问题却很多。如:
- android压缩下来比iOS大,质量却低
- h5压缩图片导致崩溃
- 微信号每天上传图片限制10w张
- 压缩后图片变形、不清晰
各路大神提供了诸多解决方案,
解决质量速度问题的libjpeg-turbo,android7.0之后也采用该库;
解决裁剪问题的uCrop;
压缩策略Luban;
压缩质量、裁剪技术方案都是无需质疑选型使用就好。那么压缩策略呢?
Luban(鲁班) —— Android图片压缩工具,仿微信朋友圈压缩策略。Luban可能是最接近微信朋友圈的图片压缩算法,有微信强大的用户量背书,我们是否可以在项目中直接使用该策略呢?
答案是NO
压缩策略其实与业务需求关系非常紧密。比如聊天时、展示文章等这个算法都特别合适,一般情况下该算法压缩出来的图片不大且可以被用户清晰辨识,如果看不清楚,可以点击下载查看原图。但是如果是拍证件,如身份证、银行卡这种就不需要。
废话太多,写不下去了。总之,没有万能算法,要做的是分析自己的业务应用场景。
gradle查看解决依赖问题-记录Butterknife8.5.1
相信每个人都遇到过重复引用库、冲突的问题。如support-v4、appcompat-v7、NineOldAndroids很容易被多次引用。
前同事在临上线前打包遇到merg出错
How fix?
Android正确获取IP及MAC
每个产品都会统计用户终端信息。稍不注意就会经我们的手造成公司得到的数据错误,造成分析甚至战略错误。(假装是程序猿缔造了世界)
设备:Oppo R9s、vivo X9
系统:Android 6.0.2
网络:4G
错误IP和MAC分别为
fe80::188c:24ff:fe49:8e54%dummy0
02:00:00:00:00:00
错误代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public static String getLocalIpAddress() {
try {
for (
Enumeration<NetworkInterface> networkInterfaces = NetworkInterface.getNetworkInterfaces();
networkInterfaces.hasMoreElements(); ) {
NetworkInterface networkInterface = networkInterfaces.nextElement();
for (Enumeration<InetAddress> inetAddresses = networkInterface.getInetAddresses();
inetAddresses.hasMoreElements(); ) {
InetAddress inetAddress = inetAddresses.nextElement();
if (!inetAddress.isLoopbackAddress()) {
String ipAddress = inetAddress.getHostAddress().toUpperCase();
return ipAddress;
}
}
}
} catch (SocketException e) {
}
return null;
}
然后根据搜索结果认为,直接将“%dummy0%2”去掉结果即为ipv6地址。不管你信不信反正当时我是信了,后来脑海里有一个声音时不时告诉我这不对,世界不是这样的。(程序猿后遗症)
use RestTemplate in Spring
Spring中提供RestTemplate方便访问Web服务,不再需要使用HttpClient、HttpComponents等
差异
使用方式详细见api,唯一注意区别参数uriVariables,遵循RESTful风格为uri变量,如:https://api.github.com/users/2tu
可以写成
restTemplate.getForObject("https://api.github.com/users/{userName}", String.class, "2tu");
Map<String, String> uriVariables = Collections.singletonMap("userName", "2tu");
restTemplate.getForObject("https://api.github.com/users/{userName}", String.class, uriVariables);
注:SpringBoot默认采用jackson
android数据共享,Application\Singleton存储数据出错的问题
两天终于完成了某模块的数据共享问题的改造。此次问题就是传说中万恶的Application及Sigleton存数据的问题。
曾经有大拿老张疑惑说Android怎么可能没有一个安全的临时存储数据的地方。接下来我们看一下在本次应用中实际发生的问题。并查看解决知名app掘金v3.1.1出现的这个问题
采用官方提供api机制来解决问题。
一、问题
应用切换到后台返回程序Crash或数据丢失。甚至在小内存手机中调用系统相机再回来应用就已经重启了
二、解决办法
采用Intent及setArgments的方式来传值,采用onSaveInstanceState保存数据以供恢复。
Activity中Fragment恢复
使用AndroidStudio开发JNI并开启Native Debugger
不使用eclipse开发JNI,使用谷歌亲儿子AndroidStudio,并开启Native Debugger
一、创建JNI工程
1、android.useDeprecatedNdk=true
在gradle.properties中添加“android.useDeprecatedNdk=true”,否则会报
”Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.“
2、创建CLog类
添加native方法public static native void i();
3、采用javah使用生成头文件
创建JNI目录