2016年5月

HTTP发展与OKHTTP优势

HTTP协议结构

  • 请求头
  • 请求体
  • 响应头
  • 响应体

请求头
a. 表明本次请求的客户端
b. 本次请求所使用的cookie
c. 本次请求希望返回的数据类型
d. 本次请求是否采用数据压缩等等一系列设置

注:可以自定义请求头

请求体
a. 指定本次请求所使用的方法
b. 主要用来携带本次请求的参数

响应头

a. 服务器标示
b. 状态码
c. 内容编码
d. cookie 返回给客户端的cookie等等

响应体

a. 主要就是我们的本次请求所返回的数据

工程流程

a. 首先客户机与服务器需要建立连接
b. 建立连接后,客户机发送一个请求给服务器
c. 服务器接到请求后,给予相应的响应的信息
d. 客户端接收服务器所返回的信息,连接断开

Http优势

  • 简单,快速
  • 灵活
  • 无连接
  • 无状态

SPDY介绍

  • SPDY是一种HTTP的兼容协议
  • 多路复用请求
  • 对请求划分优先级
  • 压缩HTTP头

HTTP2.0介绍

  • 基于SPDY,IETF定制的新一代HTTP协议
  • 更安全的SSL

OKHTTP优势

  • 支持SPDY, HTTP2.0共享同一个SOCKET来处理,同一个服务器的所有请求
  • 如果SPDY不可用,则通过连接池来减少请求延时
  • 无缝的支持GZIP来减少数据流量
  • 缓存响应数据来减少重复的网络请求
  • 可以从很多常用的连接问题中自动恢复
  • 使用非常的简单

linux nohup 不生成 nohup.out日志文件

nohup java -jar /xxx/xxx/xxx.jar >/dev/null 2>&1 &

关键在于最后的 >/dev/null 2>&1 部分,/dev/null是一个虚拟的空设备(类似物理中的黑洞),任何输出信息被重定向到该设备后,将会石沉大海

/dev/null 表示将标准输出信息重定向到"黑洞"

2>&1 表示将标准错误重定向到标准输出(由于标准输出已经定向到“黑洞”了,即:标准输出此时也是"黑洞",再将标准错误输出定向到标准输出,相当于错误输出也被定向至“黑洞”)

EditView金额校验

金额校验,保留一位小数

public class CashierInputFilter implements InputFilter {
        Pattern mPattern;
        //输入的最大金额
        private static final int MAX_VALUE = Integer.MAX_VALUE;
        //小数点后的位数
        private static final int POINTER_LENGTH = 1;
        private static final String POINTER = ".";
        private static final String ZERO = "0";

        public CashierInputFilter() {
            mPattern = Pattern.compile("([0-9]|\\.)*");
        }

        /**
         * @param source 新输入的字符串
         * @param start  新输入的字符串起始下标,一般为0
         * @param end    新输入的字符串终点下标,一般为source长度-1
         * @param dest   输入之前文本框内容
         * @param dstart 原内容起始坐标,一般为0
         * @param dend   原内容终点坐标,一般为dest长度-1
         * @return 输入内容
         */
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            String sourceText = source.toString();
            String destText = dest.toString();
            //验证删除等按键
            if (TextUtils.isEmpty(sourceText)) {
                return "";
            }

            Matcher matcher = mPattern.matcher(source);
            //已经输入小数点的情况下,只能输入数字
            if (destText.contains(POINTER)) {
                if (!matcher.matches()) {
                    return "";
                } else {
                    if (POINTER.equals(source)) {  //只能输入一个小数点
                        return "";
                    }
                }
                //验证小数点精度,保证小数点后只能输入1位
                int index = destText.indexOf(POINTER);
                int length = dend - index;
                if (length > POINTER_LENGTH) {
                    return dest.subSequence(dstart, dend);
                }
            } else {
                //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点和0
                if (!matcher.matches()) {
                    return "";
                } else {
                    if ((POINTER.equals(source)) && TextUtils.isEmpty(destText)) {
                        return "";
                    }
                    //如果首位为“0”,则只能再输“.”
                    if (ZERO.equals(destText)) {
                        if (!POINTER.equals(sourceText)) {
                            return "";
                        }
                    }
                }
            }
            //验证输入金额的大小
            double sumText = Double.parseDouble(destText + sourceText);
            if (sumText > MAX_VALUE) {
                return dest.subSequence(dstart, dend);
            }
            return dest.subSequence(dstart, dend) + sourceText;
        }
    }

使用

// 加入数据过滤
InputFilter[] inputFilters = {new CashierInputFilter()};
targetEditView.setFilters(inputFilters);

TextView ImageSpan图片居中

TexView图文混排使用ImageSpan,发现里面的图片不能居中,查看源码只可以设置align_bottom与align_baseline.
并不能设置居中

    /**
     * A constant indicating that the bottom of this span should be aligned
     * with the bottom of the surrounding text, i.e., at the same level as the
     * lowest descender in the text.
     */
    public static final int ALIGN_BOTTOM = 0;
    
    /**
     * A constant indicating that the bottom of this span should be aligned
     * with the baseline of the surrounding text.
     */
    public static final int ALIGN_BASELINE = 1;

- 阅读剩余部分 -