网上找了些教程打包出来老是有错误,提示“jar中没有主清单属性”。发现需要设置MANIFEST.MF目录为“resources”如下图
Android部分手机无法单步调试
以前用过一个手机tcl s960开发的时候曾经遇到过无法单步调试问题。今天用酷派F2也遇到这个问题,万能的Android真是无奇不有。本来下决心解决一下,经过一番折腾之后原来是mtk6592这款cpu不支持。所以用作开发机的时候要注意了
酷派大神f2日志打印问题
最近刚刚换了新手机,酷派大神f2,在做调试的时候老是看不到Log日志打印输出,还以为是Eclipse的问题,重启了好几次,都没有,在网上找了半天,终于找到答案了,
继续阅读“酷派大神f2日志打印问题”
centos6.x 使用mysql_connect问题
今天打今天打开我之前的一个bbs看看,没想到竟然打不开了。有段时间没去看了,打开chrome控制台一看,竟然是http500错误。论坛程序使用的是discuz程序,经过排查之后怀疑是数据库问题。
写了个mysql连接的小demo,放上面一跑发现mysql_connect这个函数不支持了。可能之前安装搞好,应该之前是测试过可行的才对。
解决办法:yum install php-mysql开我之前的一个bbs看看,没想到竟然打不开了。有段时间没去看了,打开chrome控制台一看,竟然是http500错误。论坛程序使用的是discuz程序,经过排查之后怀疑是数据库问题。
写了个mysql连接的小demo,放上面一跑发现mysql_connect这个函数不支持了。可能之前安装搞好,应该之前是测试过可行的才对。
解决办法:yum install php-mysql
Android的Application的onCreate问题
前段时间查看服务器访问日志的时候发现有两个接口的调用频率奇高,加起来基本上是其他接口总和的10倍以上。这两个接口分别是登陆接口和获取用户收藏列表接口,分析一下,首先考虑的是客户端问题,本机测试打印日志查看并无异常,每次启动客户端只调用了一次。然后怀疑是不是有人在抓取我的数据,但是这两个接口对于采集数据的人来说毫无意义,查看客户端的ip地址又不是同一个ip调用的,ip很多,而且很多ip只调用了这个接口没调用过其他接口。这个就奇怪了,应该也不会是有人攻击我的服务器,但是数据异常非常明显,再次思考会不会是某个旧版本出问题了,查看访问日志发现所有版本都有这个情况。
没法子了,只有仔细检查客户端代码,调用这两个接口的地方也正常,只有Application的onCreate里面有稍微可能出问题。如果Application的onCreate不断的被调用才有可能出现这样的异常数据。但是Application的onCreate只有在程序第一次启动才回被调用,换句话说就算用户经常关闭打开客户端也很难产生这么多的请求,而且跟其他接口的区别也不可能那么多大。静静的想了一段时间想起Android的Service在某些条件下会杀不死,不断的重启,比如消息推送模块就需要这样的功能。那应该就是这个问题了,马上改了一个版本上去,果然是这个问题。
这次事件得到一个道理就是任何情况下分析问题要眼观八方,不能太过相信api,要理性分析和怀疑
–每天一点点
Table ‘.\Tablename\posts’ is marked as crashed and should be repaired
昨天好好的突然服务器挂了,死活访问不了,马上重启一下。还是不能访问,查看tomcat日志文件,很多Table ‘.\Tablename\posts’ is marked as crashed and should be repaired这个错误。这是第一次遇到这个问题。首先排除改动代码引起的,因为最近没有更新过程序。
当时第一想法是先让服务跑起来再说,免得造成用户流失,然而不是那么顺利,死活都访问不了。网上搜索资料都是说数据库中表损坏之类的答案,可是服务器应该硬件是安全的不可能突然断电之类的问题。网上有很多修复的方法,暂时不敢用,问题的原因没找到如果乱搞数据库可能会引起更多的问题。搞不好数据丢失就麻烦了。我那个数据库资源有限没有做什么备份之类的,突然想起前段时间看到服务器硬盘空间好像不是很大了。会不会是硬盘满了呢,马上df -h查看,果然剩余空间0,马上清掉一些文件。重启机器,重启后还是不能访问,使用Navicat Premium的repaired fast修复已经,重启tomcat。oooo起来了
–每天一点点
sqlite的insert or update实现
通常需要插入一个记录的时候我们需要先判断在表中是否已经存在,如果存在则直接更新这条记录。
一半情况下我们会做两步操作,先通过select语句查询符合条件的记录条数,如果大于或等于1则代表记录存在。如果记录存在则使用update语句进行更新操作。
今天发现sqllite里面多少个replace的命令,可以用来替换已存在的记录。
INSERT OR REPLACE INTO MESSAGEINFO(id,userId,contentId,contentType,title,content,createTime,nickname,headImg)VALUES(?,?,?,?,?,?,?,?,?);
这个语句的作用是插入一记录,如果已存在则替换
但是使用的时候我们可能会遇到一个问题,当我们需要保留一些字段的值的时候,也就是局部更新,我们需要用下面的语句来实现
INSERT OR REPLACE INTO MESSAGEINFO(id,userId,contentId,contentType,title,content,createTime,nickname,headImg,readed)VALUES(?,?,?,?,?,?,?,?,?,(select readed from MESSAGEINFO where id = ?));
–每天一点点
关于VideoView无法监听视频播放时缓冲或者卡顿状态的解决办法
[code lang=”js”]
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
public void run() {
int duration = videoView.getCurrentPosition();
if (old_duration == duration && videoView.isPlaying()) {
videoMessage.setVisibility(View.VISIBLE);
} else {
videoMessage.setVisibility(View.GONE);
}
old_duration = duration;
handler.postDelayed(runnable, 1000);
}
};
handler.postDelayed(runnable, 0);
[/code]
只需要判断当前播放位置与下一秒播放位置是否相等即可。所以通过这个方法即可实现使用VideoView监听缓冲状态,来实现出现缓冲中的提示了。不过,响应还是有点慢的。(默认是1秒)可以更改这里的时间来缩短响应时间。我使用的是0.5秒。
其他地方看到的,非常不错的思路啊
–每天一点点
Sencha Cmd 5 升级指南
本指南旨在帮助使用Sencha Cmd的开发商从ExtJS的4.1.1a+迁移到ExtJS的5.0.x中。即使此版本中有一些重要的变化,Sencha Cmd也试图使升级过程尽可能轻松。在使用之前我们的老工程需要符合下面的全部假设:
1.你的应用程序使用了 Ext JS 4.1.1a以上版本
2.你的应用程序使用了Ext JS建议的MVC模式
3.你的工程当前使用的是Sencha Cmd进行开发
由于时间,期限和支持许可的限制并不是所有的客户都使用最新版的Ext JS和Sencha Cmd。时间,期限和支持许可的限制往往决定了企业使用哪个版本的Ext JS。
抽出时间来升级到Ext JS的4.x和Cmd的4.x版的最新版本比直接升级到5.x顺利得多,这样可以确保你修复最近的许多bug和避免显著API的变化。
迁移过程
准备工作
清理
在迁移过程的第一步是确保你的源代码控制系统没有正在修改的版本,不建议变修改变改动。你可以用Sencha Cmd查看你的状态是否存在,确保状态会不会丢失。
安装合并工具(建议)
在升级过程中Sencha Cmd可能需要你手动合并一些文件。
好消息,像版本控制,有一些工具可以帮助解决这些合并冲突。Sencha Cmd的可以使用任何可视化的合并工具,你可以通过命令行(这是几乎所有的人)中运行。这一步是可选的,但强烈建议,因为它将使处理升级简单得多。
下面列出一些合并工具,有些是免费的有些是收费的
p4merge
SourceGear
kdiff3
Syntevo SmartSynchronize 3
TortoiseMerge – (part of TortoiseSVN)
AraxisMerge
接下来你将要配置Sencha Cmd去使用这些工具。
升级Sencha Cmd
接下来你要或者最新版本的Sencha Cmd,如果你已经安装了就版本的在你计算机上你可以使用下面命令来安装:
sencha upgrade –beta
又或者到以下页面去下载安装包
http://cdn.sencha.com/cmd/beta/5.0.0.116/release-notes.html
下载后安装Sencha Cmd,并重启你的控制台。
配置代码合并工具
如果你选择好了代码合并工具你需要配置两个属性到配置文件中:
cmd.merge.tool
cmd.merge.tool.args
配置文件“sencha.cfg”在Sencha Cmd的安装目录下
升级app
如果你已经准备好了上述步骤,你只需要在你的工程的根目录执行以下命令:
sencha app upgrade -ext
几分钟后你将会看到文字提示说你的应用程序升级成功。
加载器(Microloader)
在Sencha Cmd的以前的版本中,Ext JS的应用程序相对于Sencha Touch要遵循一个非常不同的加载过程。这主要是由于Sencha Touch的“ Microloader”。在版本Sencha Cmd4中Microloader从Sencha Touch搬进Sencha Cmd,但在当时的Microloader可能无法在所有支持Ext JS的浏览器上运行。
在Sencha Cmd4和Ext JS5中这一限制不再存在。这意味着Ext JS5应用程序现在可以使用与Sencha Touch相同的过程。
app.json
为了更好的使用这些功能,我们首先要转换app.json文件中的“x-compile”类型的注释到microloader脚本中。通常你需要转移script和css引用。按照以前的Sencha Cmd版本生成的文件应该是这样的:
[code lang=”js”]
<!– <x-compile> –>
<!– <x-bootstrap> –>
<link rel="stylesheet" href="bootstrap.css">
<script src="../ext/ext-dev.js"></script>
<script src="bootstrap.js"></script>
<!– </x-bootstrap> –>
<script src="app.js"></script>
<!– </x-compile> –>
[/code]
上面的标记应改为这样:
[code lang=”js”]
<script id="microloader" type="text/javascript" src="bootstrap.js"></script>
[/code]
bootstrap.js文件s是Sencha Cmd产用于加载microloader。此文件只用在开发模式。上面的脚本标记将用于替换之前的build,就像替换之前的“x-compile”代码块
相当于“app.json”看起来像这样:
[code lang=”js”]
{
"framework": "ext",
"css": [
{
"path": "bootstrap.css",
"bootstrap": true
}
],
"js": [
{
"path": "app.js",
"bundle": true
}
]
}
[/code]
你可能会发现这里没有导入”ext-dev.js”文件。这是因为Sencha Cmd 5已经自动的为你添加工作空间。
还有许多其他选项,您可以在“app.json”文件探索。此文件可让您轻松访问包(使用”requires”),并允许您将选项传递到运行时。这是因为你的“app.json”文件的内容将被加载Ext.manifest。
更多有关信息请查看Microloader的文档
Build Properties
在之前版本的Sencha Cmd种,很多属性文件保存在.sencha/app目录下,在Sencha Cmd5中他们都被包含进app.json文件了。app.json内容中使用app.作为属性名的前缀,例如:
[code lang=”js”]
{
"theme": "ext-theme-crisp",
"sass": {
"namespace": "MyApp"
}
}
[/code]
用来替换”.sencha/app/sencha.cfg”:
[code lang=”js”]
app.theme=ext-theme-crisp
app.sass.namespace=MyApp
[/code]
还有很多属性不能在app.json中配置(通常是因为他们不是app.前缀的),但是还是建议如果有可能尽量把配置信息写到app.json文件中。更多的信息可以参考”.sencha/app/defaults.properties”。
查看(Watch)
最后一个步骤是去到你的应用程序根目录查看(Watch)你的app,使用Watch工具你可以实时的预览你的app。
你可以使用自己的webService或者使用自动工具直接http://localhost:1841, 你还可以通过下面属性更改发布信息
build.web.port=1841
build.web.root=${workspace.dir}
如果你想查看日志可以使用
sencha -info app watch
如果你想快速启动可以使用
sencha -quiet app watch
druid使用
Druid是阿里开源的一个为监控而生的数据库连接池,如果项目需要查看性能使用这个将可以非常清晰的看到大部分监控项目。项目地址是https://github.com/alibaba/druid
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。首先编写druid的配置文件
[code lang=”js”]
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/bobodb?createDatabaseIfNotExist=true&autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8
username=xxxx
password=xxxxxxxx
filters=stat
initialSize=2
maxActive=300
maxWait=60000
timeBetweenEvictionRunsMillis=60000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=false
maxPoolPreparedStatementPerConnectionSize=200
connectionProperties=druid.stat.mergeSql\=true
[/code]
然后创建连接池
[code lang=”js”]
static {
try {
Properties properties = new Properties();
properties.load(DBConnection.class.getClassLoader().getResourceAsStream("druid.properties"));
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
logger.error("初始化数据库连接异常:{}", e.getMessage()); //$NON-NLS-1$
e.printStackTrace();
}
}
[/code]
获取连接
[code lang=”js”]
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (Exception e) {
logger.error("获取Mysql数据库连接异常:{}", e.getMessage()); //$NON-NLS-1$
e.printStackTrace();
}
[/code]
配置url监控(web.xml)
[code lang=”js”]
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/druid/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>DruidWebStatFilter</filter-name>
<filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
<init-param>
<param-name>exclusions</param-name>
<param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DruidWebStatFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
[/code]
其他更详细的配置可以参照官网文档
https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
打开http://localhost:8080/QLBoboService/druid/sql.html可以看到效果
–每天一点点