之前项目总会遇到很多搜索框类的功能,虽然不是很复杂,不过每次都要去自己处理数据,并且去处理搜索框的变化,写起来也比较麻烦,今天来做一个比较简单的通用搜索栏。
先看下效果图:
没什么特别的,只是今天要做的就是简单的把搜索框的内容封装一下.
一、分析功能 先考虑一下,搜索框一般都是由一个搜索图标(一般都是一个放大镜),一个输入框和一个清除按钮组成.然后会通过监听输入框的变化去处理清除按钮的显示和隐藏并且去过滤相关的数据.最后去刷新适配器,显示过滤后的数据.基本上搜索框的功能都大同小异. 有了上边的分析,我们可以去提取出一个通用的搜索框布局,然后写一个自定义ViewGroup去处理相关的页面显示等问题.
二、具体实现 先来写一些自定的属性,方便之后使用,新建一个attr文件并定义自定义属性如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <!--搜索图标左边margin--> <attr name="SearchBarIconMarginLeft" format="dimension"/> <!--搜索图标右边margin--> <attr name="SearchBarIconMarginRight" format="dimension"/> <!--搜索图标--> <attr name="SearchBarIconSrc" format="reference"/> <!--清除图标左边margin--> <attr name="ClearIconMarginLeft" format="dimension"/> <!--清除图标右边margin--> <attr name="ClearIconMarginRight" format="dimension"/> <!--清除图标--> <attr name="ClearIconSrc" format="reference"/> <!--搜索文字大小--> <attr name="SearchTextSize" format="dimension"/> <!--搜索文字颜色--> <attr name="SearchTextColor" format="color"/> <declare-styleable name="CommolySearchView"> <attr name="SearchBarIconMarginLeft"/> <attr name="SearchBarIconMarginRight"/> <attr name="SearchBarIconSrc"/> <attr name="ClearIconMarginLeft"/> <attr name="ClearIconMarginRight"/> <attr name="ClearIconSrc"/> <attr name="SearchTextSize"/> <attr name="SearchTextColor"/> </declare-styleable> </resources> 然后写一下搜索栏的布局searchview_layout.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="
在linux(我用ubuntu)下,明明安装好了ruby,输入命令行ruby后,却提示
-bash: /usr/bin/ruby: No such file or directory
解决问题之前,先确认一个情况,输入命令
/usr/local/bin/ruby --version
如果有版本信息,那说明ruby被装到了该目录下,而非系统认为的 /usr/bin/ruby 解决方法是在系统默认运行ruby的位置[/usr/bin/ruby]创建一个symlink(相当于win下的快捷方式),指向ruby的实际位置[/usr/local/bin/ruby]
命令是
ln -s /usr/local/bin/ruby /usr/bin/ruby
再输入
ruby -v
检测版本,OK了
=====
附赠:要是安装gem也出现这种情况[-bash: /usr/bin/gem: No such file or directory]也是同理
ln -s /usr/local/bin/gem /usr/bin/gem
====
解决方案来自:http://stackoverflow.com/a/25414682
转载于:点击打开链接
Bootstrap 提供了一些帮助器类,以便更快地实现对移动设备友好的开发。这些可以通过媒体查询结合大型、小型和中型设备,实现内容对设备的显示和隐藏。
需要谨慎使用这些工具,避免在同一个站点创建完全不同的版本。响应式实用工具目前只适用于块和表切换。
Class设备.visible-xs额外的小设备(小于 768px)可见.visible-sm小型设备(768 px 起)可见.visible-md中型设备(768 px 到 991 px)可见.visible-lg大型设备(992 px 及以上)可见.hidden-xs额外的小设备(小于 768px)隐藏.hidden-sm小型设备(768 px 起)隐藏.hidden-md中型设备(768 px 到 991 px)隐藏.hidden-lg大型设备(992 px 及以上)隐藏 打印类 详情,,,
0.环境说明 硬件环境:VMWare虚拟机,内存2GB 操作系统:Ubuntu12.04 32位操作系统 (64位操作系统的话更好,但是虚拟机还是32位吧) 准备安装软件:JDK1.7 , Hadoop2.6.0, Scala2.10.4, Spark1.2.0
1.安装JDK (1) 下载JDK1.7(建议1.7) ,名为jdk-7u79-linux-i586.tar.gz,下载地址http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html (2) 将下载的jdk-7u79-linux-i586.tar.gz复制到/usr/local目录 进入文件所在目录,cp jdk-7u79-linux-i586.tar.gz /usr/local (3) 解压缩 # tar zxvf jdk-7u79-linux-i586.tar.gz, 得到jdk1.7.0_79文件夹,为其创建快捷方式:
# ln –s jdk1.7.0_79 java (4) 修改配置文件~/.bashrc,添加环境变量:
# sudo gedit ~/.bashrc //打开文件 向该文件末尾添加如下语句并保存:
export JAVA_HOME=/usr/local/java export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH 关闭,控制台输入
# source ~/.bashrc激活环境变量 输入 java –version验证是否配置正确
2 配置ssh无密码登陆 (1)安装ssh-server
# apt-get install openssh-server (2)控制台输入
# ssh-keygen -t dsa -P '' -f ~/.
最近刚开发的网站项目进入线上测试发生了一个奇怪的问题,每天大概到上班时间左右就会遇到卡死情况。查看apache的access.log和error.log并没有详细的记录。表明不是程序内部的问题。然后修改本地Host文件到服务器还是卡死,排除了dns解析问题。因为安排了外部人员测试,于是将域名解析到另一台测试服务器,奇迹般的两边都没有问题了。
测试服务器装的是一个集成环境,所以配置跟正式环境还是稍有不同的。所以原因可能出在apache本身上面。
在网上搜索一番后,得知IE10浏览器会导致Apache2.4版本阻塞假死。查看了一下线上服务器版本,果然是apache2.4。结合每到上班时间就卡死的情况来看,可以推测为测试人员在那个时间段用IE10登录了网站,导致了apache的卡死。自己下载了一个IE10浏览器测试,果真如此。按照网上说的教程在配置文件httpd.conf中添加如下两句
AcceptFilter http none
AcceptFilter https none
重启apache,果然卡死的问题不见了。
【芯片简介】
AR8033是Atheros公司的第4代10/100/1000Mbps速率以太网PHY芯片,可用于家庭网关、企业交换机、移动基站、光模块等设备。该芯片采用RGMII协议或SGMII协议与MAC芯片进行通信,只需要单一3.3V电源供电,可自行整流变换出片内电路所需其它电源。AR8033还内置了一个工作频率为1.25GHz的SerDes接口,可以直接与光纤收发模块连接,将光信号转换为适用于1000BASE-X/100 BASE-FX传输模式的电信号或用于与MAC芯片通信的SGMII协议电信号。
PHY芯片在OSI协议栈中属于最底层的物理层,与其它层的关系图如下:
图1 PHY芯片的工作位置处于OSI底层
从硬件上来说,一般PHY芯片为模数混合电路,负责接收电、光这类模拟信号,经过解调和A/D转换后通过MII接口将信号交给MAC芯片进行处理。一般MAC芯片为纯数字电路。
【SerDes接口】
SerDes是SERializer(串行器)/DESerializer(解串器)的简称。它是一种主流的时分多路复用(TDM)、点对点(P2P)的串行通信技术,即在发送端多路低速并行信号被转换成高速串行信号,经过传输媒体(光缆或铜线),最后在接收端高速串行信号重新转换成低速并行信号。
【RGMII接口】
RGMII即Reduced GMII,是GMII的简化版本。它的接口信号线数量为14根(COL/CRS端口状态指示信号,这里没有画出),时钟频率为125MHz,TX/RX数据宽度为4位,为了保持1000Mbps的传输速率不变,RGMII接口在时钟的上升沿和下降沿都采样数据。在参考时钟的上升沿发送GMII接口中的TXD[3:0]/RXD[3:0],在参考时钟的下降沿发送GMII接口中的TXD[7:4]/RXD[7:4]。RGMII兼容100Mbps和10Mbps两种速率,此时参考时钟速率分别为25MHz和2.5MHz。
图2 RGMII接口
TX_EN信号线上传送TX_EN和TX_ER两种信息,在TX_CLK的上升沿发送TX_EN,下降沿发送TX_ER;同样的,RX_DV信号线上也传送RX_DV和RX_ER两种信息,在RX_CLK的上升沿发送RX_DV,下降沿发送RX_ER。
【SGMII接口】
SGMII即Serial GMII,是PHY与MAC之间的接口,时钟频率625MHz,收发各一对差分信号线,所以总的数据速率为1.25Gbps = 625Mbps* 2。GMII和RGMII都是并行的,而且需要随路时钟,PCB布线相对麻烦,不适于背板应用;而SGMII是串行的,不需要提供另外的时钟,MAC和PHY使用CDR来恢复时钟。参考时钟RX_CLK由PHY提供,是可选的,在时钟信号的上升沿和下降沿均发生采样,主要用于MAC侧没有时钟的情况,一般情况下,RX_CLK不使用,收发都可以从数据中恢复出时钟。
图3 SGMII接口图
在TXD发送的串行数据中,每8bits数据会插入TX_EN/TX_ER 的2bits控制信息,同样,在RXD接收数据中,每8bits数据会插入RX_DV/RX_ER 的2bits控制信息,称作8B/10B编码。
【MDC/MDIO接口】
接口有MDC和MDIO两条线。其中MDC上是由MAC提供的参考时钟信号,MDIO则是可双向传输的配置数据线,配合MDC时钟进行异步传输。AR8033的MDIO接口是开漏输出,所以在使用时需要外部上拉1.5k电阻。MDIO数据帧的组成如下:
图4 MDIO数据帧结构
各字段的含义如下:
PRE 对MDC时钟信号的回复,用于校正异步传输时钟,内容为32个数字1。
ST 数据帧开始标识。
OP 操作码,10表示读数据,01表示写数据。
PHYAD PHY芯片的物理地址,共5位,其中3位可以在AR8033内部进行配置。
REGAD 寄存器地址,共5位,用于选中PHY芯片内的32个寄存器之一。
TA 用于防止在数据传输期间建立新的连接,共2位。读操作期间第1位为高阻态,第2位为0;写操作期间第1位为1,第2位为0.
DATA 表示 从寄存器读到的数据 或 向寄存器写入的数据,共16位。从高位开始传输。
IDLE 帧间空闲信号,呈高阻态。相邻两个数据帧之间至少要有1个时钟的空闲信号。
【工作模式配置】
AR8033可以工作在3种模式类别下:电口模式、光口模式、光电转换器模式。根据4根模式选择引脚上电平的不同可以将AR8033配置到不同的工作模式。官方文档描述如下:
图5 模式选择引脚
图6 光口模式的引脚电平情况
从文档中可以看到,当我们希望AR8033工作在1000Mbps光口模式时,应该把RX_DV、RXD2、RX_CLK、RXD3这4个引脚的电平下拉和上拉为0010的情况。同理,要工作在100Mbps光口模式则可以将电平设置为0110或1110。
【应用示例】
我们可以使用AR8033对光口进行管理。根据官方数据手册描述,可以采用如下结构:
图7 AR8033光纤模块系统框图
从框图中可以看出,当AR8033芯片用于光纤模块管理时,需要配置成100BASE-FX模式或1000BASE-X模式,与交换机芯片之间的数据传输采用RGMII协议。实际应用时,AR8033的工作模式直接由主控芯片通过MDC/MDIO总线进行配置;数据传输路径是AR8033传递给交换芯片,再由交换芯片传递给主控芯片。示意图如下:
图8 AR8033应用示意图
在示意图中可以看到,光模块芯片AR8033与交换芯片之间的数据传输使用RGMII协议,交换芯片与主控芯片之间的数据传输使用SGMII协议。
【代码分析】
关于 AR8033 的设备和驱动注册流程和代码之前是写在这里的,但是感觉内容与标题相互比较独立,所以单独拿出来作一篇文章《PHY芯片 AR8033驱动代码分析》。
fragment跳转activity时startActivity报错 : Intent intent = new Intent(getActivity, HuoDongDatailActivity.class); getActivity.startActivity(intent); // getActivity.不要少写
接着第一篇内容,来完成一下中间部分,中文验证码的部分,先看一下要实现的效果:
一、分析功能 分析一下,我们要实现一个验证码功能,随机生成4个中文组合,文字随机,文字颜色随机,文字会出现不同程度的旋转,并且文字周围会出现一些干扰项,点击看不清时验证码内容会进行刷新重置.要解决的问题基本就这么多,下面分步来解决一下.
(1)文字和文字颜色随机,这个实现起来不难,只需要随机产生一个中文,并且画笔定义随机的颜色即可. (2)文字旋转的话,可以通过旋转画布来完成该功能. (3)对于干扰项,可以定义一个干扰项的数组,然后随机取出里边的内容,在画布上的随机位置进行绘制即可. (4)刷新重置这个做过很多遍,只需要重置一些变量,再去调用view的重绘方法即可.
二、代码实现 通过上边的分析,我们自定义一个CodeView来完成该功能.
先来定义一些自定义属性,成员变量.代码如下:
自定义属性:
<?xml version="1.0" encoding="utf-8"?> <resources> <!--CodeView相关--> <!--扰乱项的个数--> <attr name="disturbSize" format="integer"/> <!--干扰项文字的大小--> <attr name="disturbTextSize" format="dimension"/> <!--干扰项文字颜色--> <attr name="disturbTextColor" format="color"/> <!--验证码文字大小--> <attr name="codeTextSize" format="dimension"/> <!--验证码文字颜色--> <attr name="codeTextColor" format="color"/> <!--画布旋转的度数--> <attr name="rotate" format="integer"/> <declare-styleable name="CodeView"> <attr name="disturbSize"/> <attr name="disturbTextSize"/> <attr name="disturbTextColor"/> <attr name="codeTextSize"/> <attr name="codeTextColor"/> <attr name="rotate"/> </resources> 变量:
/** * 干扰项 */ private final char[] CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; /** * 汉字画笔 */ private Paint hzPaint; /** * 干扰项画笔 */ private Paint dbPaint; /** * 汉字画笔颜色 */ private int hzColor; /** * 干扰项画笔颜色 */ private int dbColor; /** * 干扰项的个数,默认30个 */ private int DEFAULT_DBSIZE; /** * 默认画笔颜色 */ private int DEFAULT_DBCOLOR, DEFAULT_HZCOLOR; /** * 干扰项随机生成的位置 */ private float dbRandomX, dbRandomY; /** * 验证码文字 */ private List<String> codeList; /** * 随机 */ private Random random = new Random(); /** * 矩形区域 */ private Rect mBounds; /** * 干扰文字大小 */ private int dbTextSize; /** * 验证码文字大小 */ private int hzTextSize; /** * 画布旋转度数,默认为6 */ private int rotate; public CodeView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // 获取自定义属性 TypedArray ta = context.
Retrofit2 再研究及与Volley对比 Warning:关于介绍和基本使用方式,可移步Retrofit官网,这里只做特性总结和对比。
1.Features retrofit2.Call<T> 代表了一种方法的调用,发送请求给服务器,并返回相应结果,可取消,可同步请求,也可异步请求。类似于Volley中的RequestQueue。它是类型安全的,每个Call只能调一次, request 和 response 都是一一对应的,通过clone可以执行相同的请求。
可插拔的序列化机制: 目前已实现多种协议,包括Json,Jackson,Xml,Prorobuf等,且很容易自定义,只需要实现Converter接口即可。一个REST adapter 可以绑定多个Converter,采取查询的策略决定使用哪一种Converter。
Note:因为 JSON 并没有什么继承上的约束。所以我们无法通过什么确切的条件来判断一个对象是否是 JSON 对象。以至于 JSON 的 converters 会对任何数据都回复说:我可以处理!这个一定要记住, JSON converter 一定要放在最后,不然会和你的预期不符
灵活的CallAdapter,实现可替换的执行机制,可以将Call适配成任何你需要的类型: 简单说你可以通过实现CallAdapter定制Service接口的返回类型,默认是Call<T>,目前已有的实现:
RxJava-Adapter(适配Observable)Guava-Adapter(适配ListenableFuture) Java8-Adapter(适配CompletableFuture) 需要注意的是:这三种实现内部自动调用了Call的execute()或者equeue()方法。
参数化响应对象:Response<T> Response持有转换后的对象。通过Response.body()可以获得T 类型的返回数据。Response 对象还包含一些重要元数据:响应码(the reponse code),响应消息(the response message),以及响应头(headers)。
post请求可传对象作为参数 @POST("users/new") Call<User> createUser(@Body User user);@Url,允许直接传入一个请求的url: Example:
interface GitHubService { @GET("/repos/{owner}/{repo}/contributors") Call<List<Contributor>> repoContributors( @Path("owner") String owner, @Path("repo") String repo); @GET Call<List<Contributor>> repoContributorsPaginate( @Url String url); }绝对地址与相对地址 Service接口方法的请求方式注解中,”/”开始为绝对地址,生成完整url时,接在host后面,否则为相对地址,接在baseUrl后面。
解析响应头,实现连续请求,要的就是流畅 Example: 解析请求头中的分页数据,实现分页功能
一。在进行地图开发过程中,我们一般能接触到以下三种类型的地图坐标系:
1.WGS-84原始坐标系,一般用国际GPS纪录仪记录下来的经纬度,通过GPS定位拿到的原始经纬度,Google和高德地图定位的的经纬度(国外)都是基于WGS-84坐标系的;但是在国内是不允许直接用WGS84坐标系标注的,必须经过加密后才能使用;
2.GCJ-02坐标系,又名“火星坐标系”,是我国国测局独创的坐标体系,由WGS-84加密而成,在国内,必须至少使用GCJ-02坐标系,或者使用在GCJ-02加密后再进行加密的坐标系,如百度坐标系。高德和Google在国内都是使用GCJ-02坐标系,可以说,GCJ-02是国内最广泛使用的坐标系;
3.百度坐标系:bd-09,百度坐标系是在GCJ-02坐标系的基础上再次加密偏移后形成的坐标系,只适用于百度地图。(目前百度API提供了从其它坐标系转换为百度坐标系的API,但却没有从百度坐标系转为其他坐标系的API)
二。为什么会发生偏移?
1.由于坐标系之间不兼容,如在百度地图上定位的经纬度拿到高德地图上直接描点就肯定会发生偏移;只考虑国内的情况,高德地图和Google地图是可以不经过转换也能够准确显示的(在国内用的都是GCJ-02坐标系);下面是收录了网上的WGS-84,GCJ-02,百度坐标系(bd-09)之间的相互转换的方法,经测试,是转换后相对准确可用的:
package com.asiabasehk.cgg.util; /**火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的互转 * Created by macremote on 16/5/3. */ public class GPSUtil { public static double pi = 3.1415926535897932384626; public static double x_pi = 3.14159265358979324 * 3000.0 / 180.0; public static double a = 6378245.0; public static double ee = 0.00669342162296594323; public static double transformLat(double x, double y) { double ret = -100.0 + 2.0 * x + 3.
ByteBuffer rBuffer = ByteBuffer.allocate(1024) Charset charset = Charset.forName("UTF-8"); receiveText =charset.newDecoder().decode(rBuffer.asReadOnlyBuffer()).toString();
不间断收藏一些好的有思想的网站
侯哥NotIn http://www.houge.in/ 博客定位 关注个人提升,寻找美好生活技巧,发布读书笔记,思考人生感悟,践行GTD,一切为了让生活更美好。
本文是结合网上资料整理。
给知识分层很重要,因为只有在分解知识主题的基础上,才能归纳和总结的基础上,思维才能发散。
方法1–道术器 “道术器”的方法是什么,把一个知识主题,分为三“道”、“术”、“器”个层次。对应的关系为:
道——要解决的问题是什么?问题的本质是什么?
术——解决这个问题的方法是什么?所相关的要素有哪些?
器——解决这个问题所需要的工具是哪些?这些工具怎么用?
在这个体系里面,“道”所反映的是“价值观”,而“术”和“器”就是“方法论”。
方法2–5W2H法 5W2H法是第二世界大战中美国陆军兵器修理部首创。简单、方便,易于理解、实用,富有启发意义,广泛用于企业管理和技术活动,对于决策和执行性的活动措施也非常有帮助,也有助于弥补考虑问题的疏漏。
(1) WHY——为什么?为什么要这么做?理由何在?原因是什么?
(2) WHAT——是什么?目的是什么?做什么工作?
(3) WHERE——何处?在哪里做?从哪里入手?
(4) WHEN——何时?什么时间完成?什么时机最适宜?
(5) WHO——谁?由谁来承担?谁来完成?谁负责?
(6) HOW——怎么做?如何提高效率?如何实施?方法怎样?
(7) HOW MUCH——多少?做到什么程度?数量如何?质量水平如何?费用产出如何?
霍夫变换Hough 霍夫变换(Hough)是一个非常重要的检测间断点边界形状的方法。它通过将图像坐标空间变换到参数空间,来实现直线与曲线的拟合。
1.直线检测 1.1 直线坐标参数空间 在图像 x−y 坐标空间中,经过点 (xi,yi) 的直线表示为: yi=axi+b(1) 其中,参数a为斜率,b为截矩。 通过 点(xi,yi) 的直线有无数条,且对应于不同的 a和b 值。
如果将 xi 和 yi 视为常数,而将原本的参数a和b看作变量,则式子(1)可以表示为:
b=−xia+yi(2) 这样就变换到了参数平面 a−b 。这个变换就是直角坐标中对于 (xi,yi) 点的Hough变换。
该直线是图像坐标空间中的点( xi,yi) 在参数空间的唯一方程。考虑到图像坐标空间中的另一袋奶 (xj,yj) ,它在参数空间中也有相应的一条直线,表示为:
b=−xja+yj(3) 这条直线与点 (xi,yi) 在参数空间的直线相交于一点 (a0,b0) ,如图所示: 图像坐标空间中过点 (xi,yi) 和点 (xj,yj) 的直线上的每一点在参数空间 a−b 上各自对应一条直线,这些直线都相交于点 (a0,b0) ,而 a0、b0 就是图像坐标空间 x−y 中点 (xi,yi) 和点 (xj,yj) 所确定的直线的参数。 反之,在参数空间相交于同一点的所有直线,在图像坐标空间都有共线的点与之对应。根据这个特性,给定图像坐标空间的一些边缘点,就可以通过Hough变换确定连接这些点的直线方程。
具体计算时,可以将参数空间视为离散的。建立一个二维累加数组 A(a,b) ,第一维的范围是图像坐标空间中直线斜率的可能范围,第二维的范围是图像坐标空间中直线截矩的可能范围。开始时 A(a,b) 初始化为0,然后对图像坐标空间的每一个前景点 (xi,yi) ,将参数空间中每一个 a 的离散值代入式子(2)中,从而计算出对应的b值。每计算出一对 (a,b) ,都将对应的数组元素 A(a,b) 加1,即 A(a,b)=A(a,b)+1 。所有的计算结束之后,在参数计算表决结果中找到 A(a,b) 的最大峰值,所对应的 a0、b0 就是源图像中共线点数目最多(共 A(a,b) 个共线点)的直线方程的参数;接下来可以继续寻找次峰值和第3峰值和第4峰值等等,它们对应于原图中共线点略少一些的直线。
一、安装并配置,并设置远程登陆的用户名和密码
1、安装postgreSQL
sudo apt-get update
sudo apt-get install postgresql-9.4
在Ubuntu下安装Postgresql后,会自动注册为服务,并随操作系统自动启动。在Ubuntu下安装Postgresql后,会自动添加一个名为postgres的操作系统用户,密码是随机的。并且会自动生成一个名字为postgres的数据库,用户名也为postgres,密码也是随机的。 2、修改postgres数据库用户的密码为123456
打开客户端工具(psql)
sudo -u postgres psql
其中,sudo -u postgres 是使用postgres 用户登录的意思PostgreSQL数据默认会创建一个postgres的数据库用户作为数据库的管理员,密码是随机的 postgres=# ALTER USER postgres WITH PASSWORD '123456'; postgres=#为PostgreSQL下的命令提示符,--注意最后的分号; 3、退出PostgreSQL psql客户端
postgres=# \q
4、修改ubuntu操作系统的postgres用户的密码(密码要与数据库用户postgres的密码相同)
切换到root用户
su root
删除PostgreSQL用户密码
sudo passwd -d postgres
passwd -d 是清空指定用户密码的意思 设置PostgreSQL系统用户的密码
sudo -u postgres passwd
按照提示,输入两次新密码
输入新的 UNIX 密码重新输入新的 UNIX 密码passwd:已成功更新密码 5、修改PostgresSQL数据库配置实现远程访问
vi /etc/postgresql/9.4/main/postgresql.conf
1.监听任何地址访问,修改连接权限
#listen_addresses = 'localhost' 改为 listen_addresses = '*'
2.启用密码验证
#password_encryption = on 改为 password_encryption = on
1.1 顶点数组
1.5 vbo
2.0(es2.0)
3.0 vao
3.3(es3.0)
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/51304204; 本文出自:【张鸿洋的博客】
一、概述 之前写了个okhttputils的工具类,然后有很多同学询问这个工具类和retrofit什么区别,于是上了下官网,发现其底层对网络的访问默认也是基于okhttp,不过retrofit非常适合于restful url格式的请求,更多使用注解的方式提供功能。
既然这样,我们本篇博文首先研究其所提供的常用的用法:
一般的get、post请求动态url,动态参数设置,各种注解的使用上传文件(单文件,多文件上传等)下载文件等(这个不推荐retrofit去做,具体看下文) 此外,由于其内部提供了ConverterFactory用于对返回的requestBody进行转化和特殊的requestBody的构造,所以本文也包含:
如何自定义ConverterFactory 最后呢,因为其源码并不复杂,本文将对源码进行整体的介绍,即
retrofit 源码分析 ok,说这么多,既然需要restful url,我只能捡起我那个半桶水的spring mvc 搭建一个服务端的小例子~~
最后本文使用版本:
compile 'com.squareup.retrofit2:retrofit:2.0.2' 主要是源码解析,自定义Converter.Factory等一些细节的探索。
恩,写完后,发现本文很长,中途请没事站起来走两步。
retrofit2官网地址:https://github.com/square/retrofit/
二、retrofit 用法示例 (1)一般的get请求 retrofit在使用的过程中,需要定义一个接口对象,我们首先演示一个最简单的get请求,接口如下所示:
public interface IUserBiz { @GET("users") Call<List<User>> getUsers(); } 可以看到有一个getUsers()方法,通过@GET注解标识为get请求,@GET中所填写的value和baseUrl组成完整的路径,baseUrl在构造retrofit对象时给出。
下面看如何通过retrofit完成上述的请求:
Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://192.168.31.242:8080/springmvc_users/user/") .addConverterFactory(GsonConverterFactory.create()) .build(); IUserBiz userBiz = retrofit.create(IUserBiz.class); Call<List<User>> call = userBiz.getUsers(); call.enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { Log.e(TAG, "normalGet:" + response.body() + "
在使用dialog的时候可能会有这样的要求,比如说更换头像的时候,弹出一个dailog如下所示: 需要实现的功能是: (1)当用户选择拍照或者从相册选择时实现对应的功能。 (2)用户选择取消或者是点击屏幕空白部分时让dialog消失。 所遇到的问题就是点击屏幕空白部分dialog不消失,解决步骤如下: 1、在dialog.show()之前调dialog.setCanceledOnTouchOutside(true); (一般情况下就可以成功了,如果还是不行请看2) 2、检查自定义的view布局是否覆盖了整个屏幕,也就是说你所点击的屏幕空白部分实际上是你自定义view上面的一个view或者viewGroup,所以你无论怎么点击都点击dailog都不会消失,所以在你自定义的view上把最外层的viewGroup改成固定高度试试,就可以知道是否是这个原因造成dialog不消失。
因为之前遇到这个问题,不知道什么原因,最后发现是这个问题,被自己蠢到了,苍天啊
http://toutiao.com/i6278623262461133314/
之前做过一个需求,在EditText中只能输入中文或者英文字符不能输入特殊字符和数字等一些其他内容,查阅了一些资料,需要重写一下EditText中的相关方法就可以完成该功能.总结一下,方便之后使用. 看一下效果图: 可以看到在EditText中只能输入中文,不能输入其他内容. 完成这个功能首先我们要自己写一个LimitEditText继承自EditText,然后去重写onCreateInputConnection方法,在该方法中,我们需要自己设置一下内容限制,所以新建一个mInputConnecttion类继承自InputConnectionWrapper重写commitText方法来对输入的内容进行限制. 代码如下:
package com.example.junweiliu.medittext; import android.content.Context; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputConnectionWrapper; import android.widget.EditText; public class LimitEditText extends EditText { public LimitEditText(Context context) { super(context); } public LimitEditText(Context context, AttributeSet attrs) { super(context, attrs); } public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } /** * 输入法 * @param outAttrs * @return */ @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { return new mInputConnecttion(super.