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

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。

你可能感兴趣的:(android常见问题)