年度归档: 2011 年

  • C#使用NSoup解析HTML的乱码解决

    NSoup是JSoup的Net移植版本。使用方法基本一致。

    如果项目涉及HTML的处理,强烈推荐NSoup,毕竟字符串截断太苦逼了。

    下载地址:

    http://nsoup.codeplex.com/

    简单用法如下:

    NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);

    处理网络上的页面:

    NSoup.Nodes.Document doc = NSoup.NSoupClient.Connect("http://www.cnblogs.com/htynkn/").Get();

    但是遗憾的是NSoup默认的编码是UTF-8,处理中文有乱码(对于编码是UTF-8的自然不会有乱码,但是有些GB2312的就可能有乱码,谢谢 forhells的提醒)。

    目前我找到两种解决办法:

    1.下载网页源代码再处理

    WebClient webClient =new WebClient();
    String HtmlString=Encoding.GetEncoding("utf-8").GetString(webClient.DownloadData("http://www.cnblogs.com/htynkn/"));
    NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);

    2.获得网页的流

    WebRequest webRequest=WebRequest.Create("http://www.cnblogs.com/htynkn/");
    NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(webRequest.GetResponse().GetResponseStream(),"utf-8");

    第二种用着比较方便,但是我觉得第一种比较合适,毕竟NSoup是个Html解析类,下载网页代码这种事情本来不应该交给它。…

  • Android自动匹配电子邮件地址,网址,电话–谈Linkify的使用

    Android自动匹配电子邮件地址,网址,电话–谈Linkify的使用

    翻看Android Api,无意看到了Linkify。按照Api的说明,Linkify可以转化符合匹配规则的文字为可点击的连接。

    感觉这个还是有点用处,下面来试一试。

    1.新建一个项目

    SpxImage

    2.修改样式文件

    为了方便查看效果,添加一个EditText和一个TextView

    SpxImage

    代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightsum="1">
    <edittext android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/inputText">
    <requestfocus></requestfocus>
    </edittext>
    <textview android:layout_height="wrap_content" android:textappearance="?android:attr/textAppearanceLarge" android:layout_width="fill_parent" android:layout_weight="0.08" android:id="@+id/viewText" android:text="请输入内容"></textview>
    </linearlayout>

    3.修改AndroidLearnActivity.java

    看一下关键部分的说明

    SpxImage

    在本例子中我们使用第一个。再看一看Linkify默认支持识别什么。

    SpxImage

    MAP_ADDRESSES我没有理解到…

    下面看一下完整的代码:

    package cn.ghy.sdx;
    import android.app.Activity;
    import 
  • Android中使用Ormlite实现持久化(二)–持久化类的详细配置

    上一篇文章简单的使用了Ormlite一下,但是我觉得Ormlite出色之处就是对于需要字段,表等等的配置设计的比较好。

    下面来说说类的配置:

    如果我们开发的Android应用需要保持用户信息,那么现在新建一个类:UserAccount

    该类有六个变量:

    privateint id;private String username;private String password;private Date regTime;private String tellphone;private String email;

    用eclipse生成get和set方法:

    publicintgetId() {return id; }publicvoidsetId(int id) {this.id = id; }public StringgetUsername() {return username; }publicvoidsetUsername(String username) {this.username = username; }public StringgetPassword() {return password; }publicvoidsetPassword(String password) 
  • Asp.net 获取当前目录的三种方法

    方法一:

    string sPath = System.IO.Path.GetDirectoryName(Page.Request.PhysicalPath)

    方法二:

    string sPath = System.Web.HttpContext.Current.Request.MapPath(“/“)

    方法三:

    string sPath = Page.Server.MapPath(“/“);

    我推荐使用第二种

    有时候可能出现找不到类的情况,请引用System.Web.dll…

  • 为Android应用程序添加社会化分享功能

    为Android应用程序添加社会化分享功能

    正在做个android的小应用,有点想尝试一下社会化分享,比如分享到新浪微博啥的。看一下新浪,人人网的API,说实话功能很全很强大,但虽说有相对的SDK,但是总觉得不方便。

    因为正在使用友盟的统计SDK,无意间发还有个SNS的SDK,看了一下文档,感觉不错哈。

    总共需要3个包,Umeng-Android-SDK-SnsService.jar,httpmime-4.1.1.jar和commons-httpclient-3.1.jar。大小分别为63K,27K,298K。感觉有点点大,但是比较一下新浪,人人,腾讯微薄提供的API,其实大小没差好多,等下我们还可以压缩一下的嘛。

    新建一个文件夹libs,将3个包导入其中,只有3个哈,其他两个是我这个程序其他功能要使用的。

     

    在开发工具—SNS分享中 设置相关的Api key和Api Secret,没有就去申请一个。

    然后在Android的配置文件中添加两个Activity。

    <activity android:name="com.umeng.api.activity.OauthActivity" android:configchanges="orientation|keyboardHidden">
    </activity>
    
    <activity android:name="com.umeng.api.activity.UpdateStatusActivity" android:theme="@style/Theme.IOSched" android:configchanges="orientation|keyboardHidden">
    <intent-filter>
    <action android:name="android.intent.action.VIEW"></action>
    <category android:name="android.intent.category.DEFAULT"></category>
    <category android:name="android.intent.category.BROWSABLE"></category>
    <data android:scheme="schema友盟的应用KEY"></data>
    </intent-filter>
    </activity>

    官方文档的位置还要多一点点…但是我觉得那些看实际情况了。

    那个scheme那里主要是为了区分,应用KEY就是你在友盟注册的KEY,因为我有用它的统计SDK,所以有KEY,没有的话去申请一个。

    然后添加3个权限,访问网络的权限肯定是必须的,还有判断网络情况,友盟还要求一个读取终端IMEI的权限,一共三个。

     

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE">
    <uses-permission android:name="android.permission.INTERNET">
    <uses-permission android:name="android.permission.READ_PHONE_STATE">

    然后是资源文件,下载的SDK有,全部复制到项目里面。
  • Android中使用ormlite实现持久化–HelloOrmLite

    Android中使用ormlite实现持久化–HelloOrmLite

    Android中内置了sqlite,但是常用的开发语言java是面向对象的,而数据库是关系型的,二者之间的转化每次都很麻烦(主要是我对sql语言不熟悉)。而Java Web开发中有很多orm框架,但是想直接放到Android上用有些麻烦。尝试了一下找Android的orm框架,说实话还有好几个。

    实现考虑的是:androrm
    官网:http://androrm.the-pixelpla.net/
    说实话,这个我实在没有弄懂,一共两个包。
    一个是依赖包:Apache Commons – Lang (2.6)
    另外一个就是主包:androrm.jar 不管怎么下载的都不能使用…

    然后有考虑了一下db4o
    官网:http://www.db4o.com/
    官网上的介绍说是已经支持Android了,但是我一是觉得包有点大,而是觉得速度有点慢

    最后看到的就是ormlite
    官网:http://ormlite.com/
    一共两个包:一个是ormlite-core-4.24.jar,另一个是ormlite-android-4.24.jar
    从以下网址可以下载到:http://ormlite.com/releases/

    下面按照惯例来个Hello world
    新建Android项目:HelloOrmLite

    添加文件夹:libs,将所需的两个包复制到其中。添加引用

    新建一个model:Hello.java

    package cn.sdx.model;
    
    import com.j256.ormlite.field.DatabaseField;
    
    publicclass Hello {
    @DatabaseField(generatedId =true)
    int id;
    @DatabaseField
    
  • Quartz.NET 轻松实现定时删除数据库数据

    Quart是java环境下的任务调度系统,比起原始的数据库触发器标志和独立的调度器线程来说,这个开源的任务调度系统好用了不知道多少倍。最近部门的一个伙伴做了一个投票系统,投票是通过IP限制实现的,IP地址保存在数据库中,需要每天零时删除IP记录。

    系统是Asp.net的,本来想弄个Timer,但是老觉得不怎么放心,所以暂时改成手动了。

     

    最近投票弄完了闲下来研究了一下,发现有个.net环境下的Quart:
    Quart.Net

    从官方主页可以看到这个东西是从Quart移植过来的,就Down下了试了一下,发现用着很顺手。

     

    我使用的是1.03版的。

    引用Quartz.dll,新建一个类MyJob,并实现接口IJob,在public void Execute(JobExecutionContext context)方法中添加对数据库数据删除的相关代码。

    新建一个Global文件,在Application_Start中添加一下代码:

     
    ISchedulerFactory factory =new StdSchedulerFactory();
    IScheduler scheduler = factory.GetScheduler();
    scheduler.Start();
    JobDetail job =new JobDetail("MyJob",typeof(MyJob));
    CronTrigger trigger =new CronTrigger();
    trigger.CronExpressionString ="0 0 0 * * 
  • 拥抱NoSQL–谈Spring Data MongoDB的简单使用

    先说说MongoDB是什么。

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

    它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

    面向集合存储,易存储对象类型的数据。
    模式自由。
    支持动态查询。
    支持完全索引,包含内部对象。
    支持查询。
    支持复制和故障恢复。
    使用高效的二进制数据存储,包括大型对象(如视频等)。
    自动处理碎片,以支持云计算层次的扩展性
    支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
    文件存储格式为BSON(一种JSON的扩展)
    可通过网络访问

    MongoDB官网也有各语言所用的API,当然也有Java的了。但是平日写的东西大部分是基于Spring框架的,自然希望对于数据库的操作也在Spring的掌控之下。前几日才Spring的官网看到了SPRING DATA MONGODB,对此很感兴趣稍微试了一下。

    10月24日发布的是Spring Data MongoDB 1.0.0.M5 Released。自然还需要Spring Framework哈。

    首先引用相关的包,主要是以下两个:

    spring-data-mongodb-1.0.0.M4.jar

    spring-data-commons-1.2.0.M1.jar

    其他诸如mongo-java-driver.jar的还是需要的,看自己的需要。

    下面开始我们的操作了。

    1.首先注册一个Mongo的实例

    (1)方法一

    @Configurationpublic class AppConfig {
    public @Bean Mongomongo()throws UnknownHostException