工作中遇到的问题(持续更新)

1 在三星手机上出现这个问题,其他手机没发现问题。

java.lang.IllegalStateException: Call CookieSyncManager::createInstance() or create a webview before using this class
清除Cookie或者获取Cookie前,首先同步。

报错代码:

public String getCookies(Context context, String domain, String key){
		//获取Cookie
		CcookieManager cookieManager = CookieManager.getInstance();
		String cookie = cookieManager.getCookie(domain);
		return cookie;
	}

修改后:[清除Cookie前,首先同步]

public String getCookies(Context context, String domain, String key){
		//首先同步Cookie
		CookieSyncManager cookieSyncManager = CookieSyncManager
				.createInstance(context);
		cookieSyncManager.startSync();
		cookieSyncManager.sync();
		//获取Cookie
		CookieManager cookieManager = CookieManager.getInstance();
		String cookie = cookieManager.getCookie(domain);
		return cookie;
	}

参考文章链接地址

2 how to use dex2jar?

步骤:
1 重命名apk文件(比如:重命名你的APK文件为.zip,test.apk->test.zip)
2 拷贝.dex文件到dex2jar文件夹
3 打开Windows命令行提示,修改路径到dex2jar文件夹并且运行一下命令:d2j-dex2jar.bat classes.dex
4 你的jar文件生成在相同文件夹(名字classes_dex2jar.jar)
参考:https://stackoverflow.com/questions/5257830/how-to-use-dextojar/23480916

3Android Studio6种依赖作用

参考文章:https://blog.csdn.net/u010090644/article/details/50955141
debugCompile 仅仅针对debug模式的编译和最终的debug apk打包。
provided 是对所有的build type以及favlors只在编译时使用,不打包到最终apk。
但是我在实际环境中发现,如果一个jar包同时存在两种依赖,不会打包到最终的apk。
比如:如下tengxun_X5没有打包到debug apk。
provided files(‘libs/tengxun_X5.jar’)
debugCompile(‘libs/tengxun_X5.jar’)

4 RecyclerView小总结

RecyclerView的数据源存在变化,向数据源增加数据或者从数据源移除数据,可以选择部分刷新或者全部刷新。
比如:将数据从数据源中移除,调用相应Adapter的notifyItemRemoved方法,部分刷新数据,并伴随删除效果。每次删除数据后,数据会重排序,数据的index会变化,所以删除数据时index应由大到小删除。如果调用整体刷新方法Adapter的notifyDataSetChanged方法,不会有刷新效果,所以如果需要删除效果,慎用此方法。

5 Android如何获取UserAgent

获取UserAgent的方法

public static String getUserAgent() {
        String userAgent = "";
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            try {
                userAgent = WebSettings.getDefaultUserAgent(mContext);
            } catch (Exception e) {
                userAgent = System.getProperty("http.agent");
            }
        } else {
            userAgent = System.getProperty("http.agent");
        }
        StringBuffer sb = new StringBuffer();
        for (int i = 0, length = userAgent.length(); i < length; i++) {
            char c = userAgent.charAt(i);
            if (c <= '\u001f' || c >= '\u007f') {
                sb.append(String.format("\\u%04x", (int) c));
            } else {
                sb.append(c);
            }
        }
        return sb.toString();
    }

6 gradle学习

学习资料:https://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/introduction/README.html

7 加解密

AES和RSA都是加密算法,其中,AES是对称加密算法,加密速度很快。RSA是非对称加密算法,公钥和私钥不一致 ,加解密速度慢。
由于AES对称加密算法速度快,而RSA加密算法速度慢。所以一般结合AES+RSA对数据进行加解密。
使用AES对称密码体制对传输数据加密,同时使用RSA不对称密码体制来传送AES的密钥。我们在项目中也采用这种。

[加解密流程]如下【转】:
1、接收方创建RSA秘钥对;
2、发送RSA公钥给发送方,自己保留RSA私钥;
3、发送方创建AES密钥,加密待传送的明文,之后用RSA公钥加密该密钥;
4、RSA公钥加密AES的密钥+AES密钥加密明文的密文----通过Internet发给---->接收方;
5、接收方用RSA私钥解密加密的密钥,之后再用解密后的AES密钥解密数据密文,得到明文。

8 fastjson序列化和反序列化

序列化和反序列化原理分析:
FastJson 反序列化学习

序列化:java对象序列化成json
方式1: @JSONField(serialize = false)
此注解修饰java类属性,可保证java序列化时不序列化此属性。
使用说明:
@JSONField(serialize = false)
public int num;
这样num属性不会序列化到json中

方式2:通过transient关键字修饰属性,如:public transient String name;
这样name属性也不会序列化到json中

9PopupWindow在Android7.0手机兼容性问题

https://www.jianshu.com/p/0df10893bf5b

10Charles抓包

ios抓包
1、保证手机和电脑连接同一个局域网,配置服务器地址(打开Charles选择Help菜单Local IP Address查看)和端口号(打开Charles选择Proxy菜单Proxy Settings…,窗口中HTTP Proxy中Port进行设置和查看)。
2、通过浏览器安装Charles证书。
3、信任证书,打开【设置】>【通用】>【关于本机】>【证书信任设置】

charles抓包乱码问题
Proxy>SSL Proxying Settings打开窗口
点击Add,填写相关Host和Port(443),选择OK。

11从网络获取Drawable,此方法需要放在子线程中调用

 /**
     * 获取Drawable,此方法需放在子线程中调用
     * @param url 图片url链接地址
     * @return Drawable对象
     */
    private Drawable getDrawableFromUrl(final String url) {
        Drawable drawable = null;
        try {
            InputStream inputStream = new URL(url).openStream();
            drawable = Drawable.createFromStream(inputStream, null);
            inputStream.close();
        } catch (MalformedURLException ex) {
        } catch (IOException ex) {
        }
        return drawable;
    }

12 ImageView

折叠屏手机,由折叠到展开,或由展开到折叠,需要设置ImageView的宽度是屏幕的宽度,但是有些情况ImageView的宽度小于屏幕宽度。
原因是:和ImageView的缩放类型有关,即android:scaleType。
如果ImageView的缩放类型是等比缩放,比如android:scaleType是fitCenter,fitStart,fitEnd,并且ImageView设置了具体的宽高值,那么设置宽度是生效的(同样适用于设置高度)。
如果没有设置具体的宽高值,比如宽度是屏幕宽度,高度自适应,那么设置宽度不生效,同样设置高度也不生效。
如果ImageView的缩放类型是非等比缩放,比如fitXY,比如ImageView设置了宽度是屏幕宽度,高度是自适应,那么设置宽度生效,同样设置高度也是生效的。

13 ImageView类scaleType(按照官网翻译)

ImageView.ScaleType CENTER
居中显示图片,不执行缩放(如果图片大小超过ImageView控件大小,裁剪掉多余部分,只显示中间部分)
ImageView.ScaleType CENTER_CROP
统一缩放图片,保持图片的长宽比(等比例放大或缩小),以使图片的宽度和高度等于或大于视图的相应尺寸*(缩小或放大到宽度和高度大于等于视图宽度和高度,可能存在宽度或高度裁剪)*
ImageView.ScaleType CENTER_INSIDE
统一缩放图片,保持图片的长宽比(等比例放大或缩小),以使图片的宽度和高度等于或小于视图的相应尺寸。(缩小或放大到宽度和高度完全看见)

ImageView.ScaleType FIT_CENTER
Scale the image using Matrix.ScaleToFit#CENTER.
等比例放大或缩小至完全可见,并居中显示(左侧或右侧可能有空隙)

ImageView.ScaleType FIT_END
等比例放大或缩小至完全可见,并居右/或居下显示(左侧或上方可能有空隙)

ImageView.ScaleType FIT_START
等比例放大或缩小至完全可见,并居左或居上显示(右侧或下方可能有空隙)

ImageView.ScaleType FIT_XY
不按照比例放大或缩小图片,拉伸或压缩至ImageView大小

ImageView.ScaleType MATRIX
Scale using the image matrix when drawing.
可参考:https://blog.csdn.net/u012702547/article/details/50586946

13 获取字符串中数字的正则表达式

public String getFirstNumber(String text) {
if (TextUtils.isEmpty(text)) {
return “-100”;
}
Pattern p = Pattern.compile(“\d+”);
Matcher m = p.matcher(text);
while (m != null && m.find()) {
return m.group();
}
return “-100”;
}

比如:String message =“张三的年龄是18岁” 获取的是18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值