Blog icon indicating copy to clipboard operation
Blog copied to clipboard

Results 89 Blog issues
Sort by recently updated
recently updated
newest added

# 后端开发记录 16.03.23 标签(空格分隔): PHP Codeigniter VIM --- - 在操作数据库的时候,有这么一个需求,获取当前表中某一列的最大数据并返回,如果表中没有数据,返回1。 ``` select_max('xxx','max'); //获取到某一列的最大值. $query = get('table'); if($query->num_rows()>0){//always true, even table is empty. do sth... } ``` `select max()` 函数返回值总有一行,即使是NULL。所以num_rows()计算到的行数总是大于0. 返回值是一个set。...

# AndroidStudio aidl is missing 标签(空格分隔): Android --- 从Windows开发环境换到OS X,不想再凸墙下载SDK了,索性直接把以前在Win下的SDK文件夹Copy过来使用,结果发现编译报错,本来以为是Git下载代码出问题了,或者是Gradle下载依赖项出了问题。 StackOverflow上面提到的解决办法都是说SDK的版本有BUG,更换一个版本就好了。 由此启发感觉到SDK可能不对头,所以拖了一份别人的OS X下的SDK过来试,结果不再报错。 本来以为Java做出来的东西是通用的,结果发现并不是这样。看来SDK里面的水也很深,写出来给大家参考下,这个点新手还真是不容易想到的。

# Git 相关 标签(空格分隔): Git --- `ssh -T [email protected]` > 测试Git的ssh `Git rebase -i head~x` > 把在一个分支里提交的改变移到另一个分支里重放一遍。 > 此时,如果commit里面存在两个parent,即这个commit是从两个分支合并过来的,这个commit **不会被选到**。但是在我们开发的混乱的代码分支上,如果不pick这个commit,就会导致代码丢失。 > > 我的解决方法是手动添加这次commit,执行到这次commit的时候会报错。 > 通过报错可以发现,rebase的时候使用了`cherry-pick`这个命令,这条命令需要一个`-m [1|2]`选项,指定此次的patch是针对于哪个父commit的。可以通过`git log --parents` 看到commit的parents,`-m`的1代表第一个parent,2代表第二个。 >...

# Tomcat解析URL中文乱码问题 标签(空格分隔): JSP --- 不是第一次遇到这个问题。当时使用了重组String的方法来解决,也知道产生乱码的原因是编码和解码的时候使用的字符集不一致,但是时间久了,难免忘记当时的心得,而且限于眼界,当时对这个问题也没有进行深究,今天又折腾了半天,记录一下,如果将来有更深入的研究,再来完善。 首先,Java的Class文件内部编码采用UTF-16,特殊情况下编译时才会需要手动指定源文件编码格式,所以源文件的编码方式不会导致中文乱码出现,比如 ``` //fileEncoding = GBK String data = "你好"; printWriter.write(data); ``` 服务器端接收到的并不是GBK编码的字节流。 使用Post方式访问Tomcat服务器时,服务器默认使用ISO-8859-1来解析收到的数据。设置`request.setCharacterEncoding("UTF-8")`可以使服务器强制使用"UTF-8"编码集对收到的数据进行解码。而正常情况下应该在发送Post请求的时候在HTTP头中通过`Content-Type`指定字符串的编码方式。这样Tomcat就可以根据HTTP头中的信息指定编码集进行解码,此时中文解析正常。 使用Get方式访问Tomcat服务器时,默认采用`ISO-8859-1`来解析收到的数据,即使设定了`request.setCharacterEncoding("UTF-8")`,也不会生效,是因为Tomcat服务器的`conf/service.xml` 中设定``中的`useBodyEncodingForURI=false(默认)`。设定为`useBodyEncodingForURI=true`就可以使`request.setCharacterEncoding("UTF-8")`生效。或者在``中通过设定`URIEncoding="UTF-8"`指定Get方式默认使用`UTF-8`来解码。 经过这样的设定之后,就不用使用`new String(bytes, encoding)`的方式来解析中文了。我不喜欢用重建String的方式,要打的代码太多了。 IE对URL中的中文默认好像不是使用`UTF-8`来编码的,所以这个时候IE访问带中文的URL还是乱码。嗯,我不打算兼容IE。 参考: [从Tomcat的中文乱码问题谈Java编码机制](http://www.yangyong.me/%E4%BB%8Etomcat%E7%9A%84%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81%E9%97%AE%E9%A2%98%E8%B0%88java%E7%BC%96%E7%A0%81%E6%9C%BA%E5%88%B6/) [Tomcat关于encoding编码的默认设置以及乱码产生的原因](http://desert3.iteye.com/blog/1418406) 又进行了测试: ```...

# Eclipse导出JAR文件 标签(空格分隔): JAVA --- 做DEMO的时候使用到了org.json。能找到源码,但是没有在官网找到下载JAR包的地方,而且不想把org.json的源码放到我的代码里面。 看到一篇文章说可以把源码导出成JAR包,再使用,但是没有说清楚导出的流程。于是自己导包。由于某些原因,电脑里面安装的JDK是1.8的版本。 发现导出来的包部署使用以后会报错。以为是MyEclipse版本太旧了,或者Tomcat版本太旧。最后发现如果Eclipse中使用JDK1.8作为默认的环境,Compliance level 设定为1.8,导出来的JAR包就不能使用。而Compliance level设定为1.7就可以了。或者干脆使用JDK1.7来进行编译导出。 此时使用MyEclipse8.5,Tomcat6.0,MyEclipse的Compliance level是1.6,使用1.7的JRE。所以应该和这里没有关系。 虽然到最后也没搞明白到底是哪里出了问题,隐约可以猜测到企业部署环境不使用JDK1.8不是没有原因的。 稳妥起见,我在Maven找到了人家编译好的JAR包。就不用自己导出了。

# ActionBar 标签(空格分隔): Android --- 之前一直没有搞明白`android.app.ActionBar`和 `android.support.v7.app.ActionBar`的区别。 在StackOverflow上只看到过`getActionBar()`和`getSupportActionBar()`有区别。后者获取到的是`android.support.v7.app.ActionBar`。于是理解成了只要版本需要向下兼容之前的系统,就需要使用Support包的东西,如果我只支持高版本的系统,就没有必要使用兼容包了,然而这个想法是错误的。 实际情况在API文档里面写的很清楚: - android.app.ActionBar > the action bar appears at the top of an activity's window when the activity uses the system's **Holo...

# ListView第二坑 标签(空格分隔): WeChat --- 最近做Android端的聊天App,一个小Demo,就是把之前实习学到的Java版Socket聊天室移植到Android上。 出了个BUG,困扰了我三天,还是暴露出我Debug能力欠缺的问题,另外尽信书不如无书。O(∩_∩)O哈哈~ 参考书籍《第一行代码》,第三章里面有写了一个聊天App的界面。我个菜鸟,当然搬过来用喽。我的代码是这样实现的,应用的第一个界面是登陆界面,这里我只要求输入用户名,点击登录按钮就跳转到第二个Activity,直接显示聊天历史消息,而在第一个界面,监听输入框的回车键来调用登录按钮的Click事件。第二个Activity里面进入界面默认直接加载所有历史消息,然后设置将显示的数据定位到最后一行。此时BUG出现了: **于第一个Activity点击按钮登录第二个界面,显示正常。 但是使用回车键进入第二个界面,聊天记录就定位到了第一行,并且显示了一个Selected的状态。** 刚开始处理了一个onKeyListener触发了两次点击按钮的BUG,导致我坚定的认为是焦点那里出了错误。网上找文章也没找到几个靠谱的,今天晚上灵光一现把**MsgList的个数**和**ListView.getSelectedItemPosition()**打出来看了一下,果然发现问题了,`msgListView.setSelection(msgContentList.size())`之后,再调用`msgListView.getSelectedItemPosition()`显示是来居然是**-1**。 其实原因在`msgListView.setSelection(msgContentList.size())`。 官方说明是这样的 > public void setSelection (int position) > Added in API level 1 > Sets the currently selected...

# git 之 文件换行符 标签(空格分隔): git 换行 intellij --- 下午搞了一下午测试,发现总是在提交的时候提示自动把换行符从`lf`转换为`crlf`,真是奇怪,明明把`git config --global core.autocrlf` 设为`false`了。 查阅了资料,看到`.gitattributes`文件里面可以设定对文件换行符的操作,但是那篇文章说的有点矛盾,上面说`.gitattributes` 文件里面的设置会覆盖掉global的设置,下面给的模板里面的英文说明是没有指定global属性的时候生效。 只能自己做测试了。 _0927测试记录_ 1. 设置`git config --global core.autocrlf` 为`false`。 2. 提交一个lf格式的中英文混合多行文本文件。 3. 修改文件,提交git,可以正常检测出哪行发生了变化。notepad++软件里面打开文件,换行符还是lf。 4. 提交多次修改之后,`git...

UEFI只识别FAT32的U盘,但是FAT32又不支持4G以上的大文件。64G的U盘未免有些浪费。 使用cmd的convert转换成NTFS格式发现启动盘找不到系统了。 目前使用的办法是使用BOTICE软件将引导修改成GRUB4DOS的,取消UEFI。 关闭BIOS的UEFI应该也可以吧,但是我觉得legacy的启动方式一劳永逸。 估计之前的启动盘是误操作取消了UEFI改成GRUB4DOS了。 不知道还有没有其他更简便的方法,欢迎科普。 目前我还是觉得UEFI没那么好用。