安卓activity上手写

做安卓开发经常会有一些办公性质的系统会要求手写签批功能。比如需要针对一些办理信息进行手写标注,或者对一些word,pdf等等信息进行编辑等功能。其中针对word和pdf的技术往上可以找到,而且技术比较成熟。现在我将要介绍的是在手机所见即所得的页面上进行签批的功能实现。首先当我初步遇到这个需求的时候是先去网上找有没有相关的已经实现的技术来做参考,结果找了很久没有找到,于是开始自己想办法来做实现。首先安卓在activety上面直接进行绘制的技术不好做实现,或者可以通过自定义一个view的方式来实现,但是实现起来应该会特别复杂,而且会影响现有activety的滑动事件。 所以我就想有没有办法做一个低侵入式的方式来实现,尽量不干扰当前活动。后来想到了一个方案,我把需求拆分了两步来实现,首先对当前获得进行截图,缓存改截图文件,然后跳转到另一个专门做签批的activety在图片上进行签批操作。这样1.对原来的activety没有任何影响,2.对activety进行截屏的技术很好实现,3.图片上进行书写签批也有成熟的技术实现。思路理清了事情也就完成了百分之80了。接下来我来仔细和大家讲解下具体实现;大家先把代码下载:URL

首先是搞一个截屏的工具类ScreenShot.java有两种类型的截屏:当前显示内容截取,滚动截取;可以根据需求进行选择用哪种方式实现。这里我们就用shoot方法;shoot方法参数为当前活动上下文,最终结果是将截屏保存到指定位置并返回该位置。这里测试就用根目录做缓存位置

public static String shoot(Activity a) {
ScreenShot.savePic(ScreenShot.takeScreenShot(a), “sdcard/xx.png“);
return “sdcard/xx.png”;
}

截屏工具搞完了接下来就是在需要截屏的active中绑定触发截屏的实现。可以直接注册一个按钮来触发即可

String sdcardpath= ScreenShot.shoot (ProjectDetailActivity.this);  //截屏

截屏之后将图标路径传递到签批的activity

Intent intent1 = new Intent(ProjectDetailActivity.this, JasonDrawActivity.class); intent1.putExtra(“JasonImg”, sdcardpath);        startActivity(intent1);

其中JasonDrawActivity.java就是我们的主角,最终签批的活动。这里呢我使用的是国外的一个开源项目SignaturePad,这个手写效果是我找了很多中最满意的,自带笔锋效果。但是该项目的源码是基于android studio创建的,我要用到的项目是eclispe创建的,没办法直接用,后来我把SignaturePad转换为eclispe模式的。有需要在eclispe实现的朋友可以联系我邮箱。不过大部分人应该都转android studio了。下载下来之后直接作为库项目就可以引入到你自己的项目就行了。JasonDrawActivity中注册的几个按钮就是各种操作的入口。大家自己就能看懂。接下来我来提供示例项目给大家;

下拉框多选功能实现

这里要介绍的是一个开源插件multiple-select  github地址为https://github.com/wenzhixin/multiple-select    插件提供 的 文档本身就很全面,而且一般的主流浏览器都能够支持。

依赖的js有  jquery,bootstrap,multiple-select ;css有bootstrap,multiple-select

使用方法:给select元素设置multiple=”multiple”属性。然后通过$(‘#id’).multipleSelect();对改元素进行渲染即可;为了更能适应中文使用环境可以把js中的部分英文状态改成中文,比如全选的状态等等。可以通过全局搜索定位到相应的位置进行修改。该插件的效果很简洁大方,在我看来是比较美观的。

树形选择框实现

找了很久关于树形选择框的插件。大部分都是ztree来自己实现,虽然能用但是对代码侵入性太高,往往实现一个功能要写大量js,终于在网上被我找到了一个侵入比较低的实现方式,原博客地址为URL。但是呢大神实现后由于时间比较久只有js没有css。我重新给加了css做实现,并且对js做了调整,但是和原效果图还是有区别的,因为重在功能实现,样式大家可以自己参照我写的,做自己对应的调整即可。js下载地址 css下载地址

插件依赖:jquery,ztree

使用方法为:

<input id="simple-select" name="test" />
注册一个input框来进行绑定下拉框只需要一个id即可渲染。name是你自己最终的表单项名称
$(function(){
  var data={items: ${testArray}
  $("#simple-select").drawTree(data);
}
没错就这么简单。超低的侵入性。其中${testArray}为json数组,格式为[  {code:'root',name:'根节点',pid:-1}, 
    {code:'node',name:'二级节点',pid:'root'} ]
可以从后台获取。ajax获取或者直接从作用域中获取都行。

使用cxf遇到的一个异常

org.apache.commons.discovery.DiscoveryException: No implementation defined for org.apache.commons.logging.LogFactory

jar包冲突导致的,应是你的应用中已经捆绑了commons-logging的jar包,可以删除试试。

可用的国内maven库镜像

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

使用wsdl2java工具生成天气预报客户端

1.环境和工具的准备。java环境阿帕奇cxf工具这两个身为开发的你肯定都有

2.在doc窗口找到阿帕奇cxf工具的bin目录。执行wsdl2java -frontend jaxws21 -d  代码生成路径 空格 wsdl文件地址 例如wsdl2java -frontend jaxws21 -d  C:\Users\jason\workspace\weatherReport\src e:\\WeatherWebService.wsdl生成的时候你会发现如果后面的wsdl地址你使用http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl来生成的时候会报错:undefined element declaration ‘s:schema’这是因为java中不支持这种写法。有的人说是因为这个wsdl服务器是.net的所以有不兼容的情况。算得上是一个bug吧。解决办法是将wsdl保存到本地,然后将所有的这种写法的标签删除或者用等价值替代。这样就可以生成了。

3.生成之后代码的使用

可以直接声明一个WeatherWebService 类来调用服务器端的方法获取天气。例如

WeatherWebService wws=new WeatherWebService();
ArrayOfString wwsr=wws.getWeatherWebServiceSoap().getWeatherbyCityName(“城市名称”);

当然里面不止这一种方法。你可以自己再研究

4.补充,如果到这里你出现No namespace on “html” element. You must send a SOAP request.的情况的话那么。很可能是你项目中引入了cxf的某些jar包导致的冲突的情况。具体什么类的冲突我还需要再进行研究。如果你出现了。可以删除引用的jar包即可解决。

在ajax中进行变量赋值取不到的原因

首先要知道一个事实,ajax存在一个令人惊喜的的地方就是ajax可以异步的处理请求。默认不写ajax请求方式的情况下是进行异步处理的方式。ajax对变量赋值取不到的情况正式因为这个特性。在ajax与后台交互的时候js中的代码可能早已经执行完成了。那么既然知道了原因所在,解决办法大家想必已经知道了。那就是给ajax配置为非异步的方式进行处理交互动作。

java项目添加第三方论坛实现单点登录问题

1.给dz配置ucenter,最新版本的dz自带的ucenter后台不能登录解决方法是:
打开uc_server/model/admin.php
找到第22行的
$this->cookie_status = 0;
改成
$this->cookie_status = isset($_COOKIE[‘sid’]) ? 1 : 0;
2.dz的ucenter配置和ucenter的通信失败,一般原因是key不同导致的,可以到ucenter应用中将key拷贝到dz的ucenter设置里
3.下载的ucenter java包导入项目报错,此问题是因为jar包冲突或者编译器bug导致的。可以将jre类库remove然后再build上去。如果还有异常就将jre的位置放到第一位即可
4.在测试项目中测试成功之后说明配置没问题了。现在就可以在java登录注册注销等方法中调用ucenter登录方法实现单点登录了

李蒙

我的李蒙从消失到现在已经十几年了,现在应该已为人母。可是这个世界人每个人都有真正消失的一天,想到这我为我曾经的拥有,而感到深深的欣慰。

jacob服务器上不能正常使用的探讨

前段时间有个项目需要用到生成word报告,于是用到了jacob。可是出现了异常情况:本地是可以使用的。但是传到服务器上不能正常使用。

情景1:本地和服务器的远程连接保持不断开的情况下可以正常生成word文件,但是断开就不行

情景2:服务器上tomcat通过dos窗口可以正常生成,但是以系统服务启动就不可以正常生成

也就是说,远程连接窗口不关  和  用dos窗口启动这两个条件满足其一就可以正常生成word文件。后来查了很多资料,按照别人的教程设置了office com组件权限。给office安装目录设置tomcat服务用户控制权限等都未见成效;

后来也有人说是dll64位和32位插件对不同windows server版本导致的。总之最后我是没有实现,也不打算再去实现了。因为后来我看到office官方解释,是不建议在服务器端通过office对文档进行处理的;这是官方解释地址:(https://support.microsoft.com/zh-cn/kb/257757)
主要阐述了:
1.微软对服务端处理office文档的建议:Microsoft 建议不要进行服务器端“Office 自动化”,也不为此提供支持。
2.在服务器端使用office可能产生的问题
3.处理该类问题的备选方案:在客户端上做处理
4.如果一定要这样做应该解决哪些问题
 我现在虽然还没有尝试所有的可能性,但是我大概讲述下需要设置的地方供一定要这样用的人一个参考:1.首先office是需要用户交互操作的。tomcat服务登录用户应该选上允许服务与桌面交互;2.其次该用户应该有对office的操作权限,当然包括网上配置office com组件的权限配置也要配置;3.dll版本要用对,包括不同版本的jdk环境都有可能影响,可以在本地成功后服务器上也同样环境;4.服务器上不要忘记装office,也尽量和本地一样;
大概也就这些了,我本来应该自己测试好再发的,但是项目现在运营在即没时间在服务器上测试。我现在是退而求其次把文档生成目录功能暂时去掉了;如果有人测试成功了,希望能帮忙补充全面。有需要帮助的朋友也可以email我admin@qqxh.net