winJay-简书笔记汇总

来源:互联网 发布:mac老是弹出垃圾网站 编辑:程序博客网 时间:2024/06/02 02:30
Retrofit 2.0 + OkHttp 3.0 配置   https://drakeet.me/retrofit-2-0-okhttp-3-0-config/
配置okhttp,让所有网络请求都附上你的 token。


http://www.jianshu.com/p/27bf1057f5aa  带你学开源项目:OkHttp--自己动手实现OkHttp |
很喜欢很喜欢这篇文章,与一般的源码解析不同,作者根据思路带你一步一步地实现okhttp。看完很明白okhttp源码的实现。
(1)支持自动重定向,有时我们请求的URL已经被移走了,此时server会返回301状态码和一个重定向的新URL,此时我们要能够支持自动访问新URL而不是向用户报错。
(2)支持重试机制:所谓重试,和重定向非常类似,即通过判断Response状态,如果连接服务器失败等,那么可以尝试获取一个新的路径进行重新连接,大致的实现和重定向非常类似,此不赘述。
(3)Request & Response 拦截机制
这是非常核心的部分。
通过上面的重新组装request和重定向机制,我们可以感受的,一个request从user创建出来后,会经过层层处理后,才真正发出去,而一个response,也会经过各种处理,最终返回给用户。

笔者认为这和网络协议栈非常相似,用户在应用层发出简单的数据,然后经过传输层、网络层等,层层封装后真正把请求从物理层发出去,当请求结果回来后又层层解析,最终把最直接的结果返回给用户使用。

最重要的是,每一层都是抽象的,互不相关的!
因此在我们设计时,也可以借鉴这个思想,通过设置拦截器Interceptor,每个拦截器会做两件事情:


接收上一层拦截器封装后的request,然后自身对这个request进行处理,例如添加一些header,处理后向下传递;
接收下一层拦截器传递回来的response,然后自身对response进行处理,例如判断返回的statusCode,然后进一步处理。




http://blog.csdn.net/qing666888/article/details/55003689  Android Studio使用远程依赖时下载不了jar包的解决方法




http://www.jianshu.com/p/47e72693a302  带你学开源项目:Meizhi Android之RxJava & Retrofit最佳实践
利用Subscription来管理异步处理与Activity生命周期
对于异步我们知道一直存在一个问题,假设一个页面要同时发出很多个http请求,如http1, http2, http3...,然后这些请求会被放在一个队列里依次发出,而且每个请求发出后需要等待一段时间才能得到返回数据。
那么问题就来了,假设在A页面发出了多个网络请求,在这些网络请求还在等待响应时用户就跳转到了B页面,在以前的情况下是,A页面的网络请求仍然进行直到所有数据返回,而且当数据返回时会尝试去调用A页面的UI进行修改,而此时已经进入了B页面,所以,这不仅造成了网络资源的浪费,也存在一定的风险。

有了RxJava,我们可以把每一个网络请求转化为一个Subscription对象,这个Subscription对象可以被手动unsubscribe,即停止订阅所请求的数据源,这样就可以暂定数据请求,而且即使数据返回回来,由于我已经取消订阅了,所以不会再接收到这些数据了。





http://www.jianshu.com/p/e558a91d8f6f  Java的equals与hashcode对比分析 
equals() 与 hashcode() 的用处?


(1)我们一般用equals()来比较两个对象的逻辑意义上的值是否相同。
(2)而 hashcode() 则是对一个对象进行hash计算得到的一个散列值,它有以下特点:


1.对象x和y的hashcode相同,不代表两个对象就相同(x.equals(y)=true),可能存在hash碰撞;不过hashcode如果不相同,那么一定是两个不同的对象
2.如果两个对象的equals()相等,那么hashcode一定相等。
所以我们一般可以用hashcode来快速比较两个对象互异,因为如果x.hashcode() != y.hashcode(),那么x.equals(y)=false。




如何重写 equals() 方法呢?


一般而言,如果你要重写 equals() 方法,有下面一套模版代码可以参考:


首先使用 == 来判断两个对象是否引用相同;
使用 instanceof 来判断两个对象是否类型相同;
如果类型相同,则把待比较参数转型;
比较两个对象内部每个逻辑值是否相等,只有全部相等才返回true,或者返回false;
测试这个方法是否能满足上面几个特性。


谨记:重写 equals() 时要保证:两个equal的对象一定有相同的hashcode