Archive for 九月 2012

Andriod开发 LogCat中PID,tid tag都显示unknown或问号的解决方法

方法简单,升级ADT.
在线安装太慢可离线安装,离线安装包下载地址:
http://dl.google.com/android/ADT-20.0.3.zip
后面的20.0.3版本号可以在线安装时获取。

Android 开发 绘制圆角距形背景

需要圆角距形的背景,可是直接用一终圆角的图片,但是因为Android屏幕分辨率太乱,为了能适应所有的分辨率,我们不可能事确定好宽度,虽然可以用draw9patch,但我一直没掌握那工具的用法,做出来的图片最终还是变形,但用下面的方法就永远不会变形,因为没有用图片,是用Android直接绘图.
最终的效果图: Continue reading ‘Android 开发 绘制圆角距形背景’ »

ThinkPHP 3.1 URL中带点参数的获取

URL中带点的参数,点后会被自动识别成文件扩展名而过滤掉,只能取到点前的值,比如:
http://192.168.0.81/thinkphp/index.php/Graph/cluster/name/my%20cluster/range/hour/server/localhost.localdomain
取server参数时,只能取到localhost。
解决方法,在项目配置文件中加上:


'URL_HTML_SUFFIX'=>'.html'

不一定要html,看自己需求,设置了以后,会过过滤被设置的值。

Ganglia PHP Web Frontend 简要分析

经过几天的研究,总结把Ganglia的结构弄清楚了。
Ganglia分为三部分:
gmond,客户端守护进程,安装在所有需要监控的机器上,用于收集客户端的信息
gmetad,服务端守护进程,安装在监控主服务器端,收集从客户端传过来的数据,使用rrdtool,把数据保存在/var/lib/ganglia/rrds/目录下。
PHP Web frontend: 与gmetad装在同一台服务器,就是一个普通的php程序,不需要特殊的扩展,apache+php就可以了,也不需要数据库。因为登录验证是通过Apache,读报表数据是直接从rrdtool里读。
PHP Web frontend最关键的部分在于,读取Grid,Cluster,Host信息(节点分组,客户端列表),以及画图(表)两部分。
读取分组及客户端信息,是在ganglia.php中的Gmetad()方法,使用socket连接到gmetad(一般就是本机)的8652端口,与gmetad交互,返回的是xml格式的数据.
画图则更简单,在graph.php中,通过传入的参数,组合生成rrdtool的画图命令,使用passthru方法执行该命令并输出,输出前先把Content-type设为image/png.

可以得出结论,PHP Web frontend其实只是用于展示gmetad数据的数据,而且交互的数据都是标准的XML,我们完全可以用其他语言如Java,.Net之类的开发自己的前端。

Android SQLite数据库框架 PreparedQuery对象的获取

在查询条件比较复杂时,需要调用List query(PreparedQuery preparedQuery) 方法。
PreparedQuery对象获取方法为:


			QueryBuilder builder = serviceDao.queryBuilder();
			builder.where().eq("place", place).and().eq("category", category);
			PreparedQuery preparedQuery=builder.prepare();

ThinkPHP 模块分组配置

模块分组有助于简化目录结构,配置方法:
这里以项目App,模块Home和Admin为例
入口文件
index.php:


<?php
define('APP_DEBUG', true);
define('APP_NAME', 'App');
define('APP_PATH','./App/');

require './ThinkPHP/ThinkPHP.php';

?>

运行一次,会生成App目录,找到,/App/Conf/config.php,编辑:


<?php
return array(
	//分组列表
	'APP_GROUP_LIST' =>'Home,Admin',
	//默认模块
	'DEFAULT_GROUP'=>'Home'
);
?>

最后,在/App/Lib/Action下建立Home和Admin目录,把自动生成的IndexAction.class.php拖进Home,或者自己写个Action,再刷新页面。

Android开发 自定义Toast样式II 在AlertDialog基础扩展

前文,Android开发 自定义Toast样式,基本实现了自定义的Toast,但没想到客户的需求有点变态。要求提示的时候背景变灰,用户不可操作,而且提示的时间还要根据字符串长度计算,原想在Toast的基础上扩展,修改WindowManager.LayoutParams.flag,但发现Toast源代码调用了隐藏的API,我们是没法实现了。客户的要求其实就是一个AlertDialog,那就写个自定义的AlertDialog吧。因为项目中大量使用了Toast,调用方法为:


MyToast.makeText(context, "密码错误,请进SOS查看!!", Toast.LENGTH_LONG).show();

为了减少代码修改,必须把我们自定义的Toast也加上一个静态的makeText方法,和一个show()方法,以达到不用修改调用方法的目的。 Continue reading ‘Android开发 自定义Toast样式II 在AlertDialog基础扩展’ »

Android开发 解决AlertDialog中的EditText无法调出输入法的问题

在AlertDialog中使用自定义的View,如果View中有EditText,在上面点击,默认是跳不出软键盘的,不是焦点的问题。
解决方法,有两种,一是把AlertDialog换成Dialog,但这么一来,对话框的最外层会多出一个框,顶部还会空几十个DP,当然可以用setBackgroundDrawable(new ColorDrawable(0))把背景设为透明,隐藏掉边框,但是上面空着的几十个DP还在,对话框就不是在屏幕居中了。 Continue reading ‘Android开发 解决AlertDialog中的EditText无法调出输入法的问题’ »