CI 获取数据库数据类型总是为STRING 的解决方案

使用php的CI框架的时候,发现在数据库中是int型的数据,返回的时候全变成了string了。对于弱类型的语言来说,这个没多大关系,但是,如果是做APP接口,在进行JSON转对象的时候,可能要求score这种字段是int类型,这个时候就不行了。其实这不是CI框架的问题,PHP与mysql的通讯全都用string。

Read More

Flutter解决按钮请求防重复提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var lastPopTime;

InkWell(
onTap: (){
// 防重复提交
if(lastPopTime == null || DateTime.now().difference(lastPopTime) > Duration(seconds: 2)){
lastPopTime = DateTime.now();
_payOrder(context);
}else{
lastPopTime = DateTime.now();
MyUtils.showMessage("请勿重复点击!");
}

},
)

新浪微博PC端模拟登陆

工具

这次使用的工具是Charles和chrome浏览器,看过我之前文章的同学应该知道我使用的Mac电脑,Fiddler不能用,之前用虚拟机很麻烦。很早的时候有装过Charles,但是不太会用,后来发现一篇比较详细的文章,忘了记录了。发现Charles还是非常好用的,而且有个很好的功能,就是可以开启多个Session进行抓取对比,这个功能非常👍,如果经常做爬虫调试的人一定能知道。我们抓取一个网站的登录过程,然后在模拟的过程中,可以再另一个session中抓取自己模拟登录的过程,然后对比一下自己的请求发送的数据和浏览器请求发送的数据是否一致。之前我调试一直都是通过打印查看,这样一方面很不方便,另外一方面打印也不完整。所以非常推荐大家使用Charles,网上破解也有很多。

Read More

Flutter更新showDialog中的内容

很多人在用showDialog的时候应该都遇到过这个问题,使用showDialog后,通过setState()无法更新当前dialog。其实原因很简单,因为dialog其实是另一个页面,准确地来说是另一个路由,因为dialog的关闭也是通过navigator来pop的,所以它的地位跟你当前主页面一样。这个概念一定要明确,因为无论在Android或iOS中,daliog都是依附于当前主页面的一个控件,但是在Flutter中不同,它是一个新的路由。所以使用当前主页面的setState()来更新,当然没法达到你要的效果。

Read More