[转]Android项目长足开框架探索(Mysql + OrmLite + Hessian + Sqlite)

前言

重组之前所用的ormlite和hessian,再增长SAE已经支持JAVA,把劳务端切换至JAVA,也便闹了本文。使用hessian来开多少传,ormlite来落实客户端和劳务端的数额存储,极大的抽了CRUD工作。本文为探讨贴,未正式用于大型项目,欢迎大家座谈下!

 

声明
  欢迎转载,但要保留文章原来出处:)
    博客园:http://www.cnblogs.com
    农民伯伯:
http://www.cnblogs.com/over140/

 

正文

一、简介

1.1 ormlite

Ormlite[Object
Relational Mapping Lite (ORM Lite)]
对象关联映射精简版(精简版的ORM)提供了部分简的,轻量级持久化Java对象及SQL数据库,同时为避免了复杂和还多之正规的ORM包的开支的效益。

支持数据库的jdbc调用,当然,最重大之一定是它们支持android原生的数据库api调用sqlite。

——转载自这里。

1.2 hessian

应用方式参照本博两篇文章:

[hessdroid]Android下用Hessian与Java服务端通讯

[hessdroid]Android下以Hessian与Java服务端通讯的传值测试

 

1.3
Android迅速支付框架说明

设想如下几个特点:

a).
客户端(Android)和劳动端都采用Java语言

b).
客户端(Android)和劳动端都支持Hessian和ormlite框架

c).
完整的支撑面向对象开发:存储和互相传输

 

二、准备

2.1 开发条件

为便利同时开发Android和Java Web,这里下载的是Eclipse IDE for Java EE
Developers版本,然后安装新型的ADT插件与TOMCAT插件。

2.2 服务端

应用服务器使用Tomcat,采用Java(JSP/Servlet)来实现劳务端的工作逻辑,数据库使用Mysql。快速框架搭建推荐大家以XAMPP(集成Apache、MySQL、PHP等,支持绿色安装)。

2.3 客户端

普通的Android环境

2.4
通信以及储存说明

服务端与客户端通过Hessian进行数据交换,通过Ormlite保存数据库(通过JDBC保存到服务端的MYSQL数据库,也堪直接保存及客户端的sqlite数据库);

 

三、代码

3.1
项目工程截图(服务端)

图片 1

HOLib共用来客户端以及服务端,保证接口和多少对象一致性。

 

3.2
重点代码分析

3.2.1 服务端

web.xml

图片 2😉

<?xml
version=”1.0″ encoding=”ISO-8859-1″?>
<web-app
xmlns=”http://java.sun.com/xml/ns/j2ee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”     xsi:schemaLocation=”http://java.sun.com/xml/ns/j2ee
web-app_2_4.xsd”     version=”2.4″>
    <servlet>
        <servlet-name>user</servlet-name>
        <servlet-class>com.nmbb.ho.server.servlet.UserServlet</servlet-class>
    </servlet>
    <servlet-mapping>         <servlet-name>user</servlet-name>
        <url-pattern>/user.do</url-pattern>
    </servlet-mapping>         <listener>         <listener-class>com.nmbb.ho.server.StartupInit</listener-class>
    </listener>
</web-app>

图片 3😉

 

StartupInit.java

图片 4😉

public class
StartupInit implements
ServletContextListener {
    @Override     public void contextInitialized(ServletContextEvent
arg0) {         try {            
TableUtils.dropTable(OrmliteHelper.getConnection(), POUser.class,                     true);             //创建数据库            
TableUtils.createTable(OrmliteHelper.getConnection(), POUser.class);         } catch (SQLException e) {            
e.printStackTrace();         }     }
    @Override     public void contextDestroyed(ServletContextEvent arg0)
{
    }
}

图片 5😉

代码说明:

StartupInit可用于创造数量库表结构,这里用于测试,真实环境注意数据丢失问题。

POUser.java

图片 6😉

@DatabaseTable(tableName = “nmbb_users”) public class
POUser implements Serializable {
    /**
用户号码,6个数字 */    
@DatabaseField(generatedId = true)    
public int
suid;
    /**
用户名 */     @DatabaseField(width = 30)
    public String username;
    /**
密码 */     @DatabaseField(width = 30)
    public String password;
    /**
昵称 */     @DatabaseField(width = 60)
    public String nickname;
    /**
200 正常 201 数据校验错误 202用户已存在 */     public
int status = 200;
    /**
用于放错误信息 */     public String msg;
    public POUser() {
    }
}

图片 7😉

代码说明:

留意用一个缺损的构造函数,其他请参考ormlite资料。

 

UserServlet.java

图片 8😉

/** *
用户Servlet * * @author 农民伯伯 * @see http://www.cnblogs.com/over140/archive/2013/02/19/2917231.html * */ public class
UserServlet extends HessianServlet implements IUserService {
    @Override     public POUser
register(String username, String password) {         POUser result =
new POUser();
        System.out.println(“[UserServlet.register]…”);
        //
检测数据是否合法         if (isEmpty(username) || isEmpty(password)) {
            result.status = 201;             result.msg =
“用户称或密码不能够吧空”;         } else {
            // 检测用户是否留存
            OrmliteHelper<POUser> db = new OrmliteHelper<POUser>();            
if (db.exist(POUser.class, “username”, username)) {                
result.status = 202;                 result.msg = “用户称曾是”;
            } else {                
result.username = username;                 result.password = password;
                db.create(result);// 入库
                result.msg = “注册成功”;                
System.out.println(“create user suid:” + result.suid);             }
        }         return result;     }
    @Override     public
List<POUser> query(int suid, int startIndex, int pageSize) {         return new
OrmliteHelper<POUser>().query(POUser.class, “suid”, suid, startIndex, pageSize) ;    
}
    /**
     * 判断字符串是否为空      *      * @param str      *
@return     
*/     public static
boolean isEmpty(String str) {        
return str == null || str.length() == 0;     }
}

图片 9😉

 

3.2.2 客户端(Android)

图片 10😉

public class
UserActivity extends Activity {
    @Override     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
setContentView(R.layout.main);     }
    public void OnClickRegiger(View view) {         new AsyncTask<Void, Void, POUser>() {
            @Override             protected POUser doInBackground(Void… params)
{                 String url =
“http://192.168.68.23:8081/HOServer/user.do”;                
HessianProxyFactory factory = new
HessianProxyFactory();                 try
{                     factory.setDebug(true);                    
factory.setReadTimeout(5000);                     //不装会报
expected hessian reply at 0x48
                    factory.setHessian2Reply(false);                     IUserService basic =
(IUserService) factory.create(IUserService.class, url, getClassLoader());
                    return
basic.register(“admin”, “123456”);
                } catch
(MalformedURLException e) {                     Log.e(“UserActivity”,
“OnClickRegiger”, e);                 } catch (Exception e) {                    
Log.e(“UserActivity”, “OnClickRegiger”, e);                 }
                return null;             }
            @Override             protected void
onPostExecute(POUser result) {                 if (result != null) {                     if (result.status == 200) {
                        //保存入库
                        new
DbHelper<POUser>().create(result);                     }
                    Toast.makeText(UserActivity.this, “” + result.msg,
Toast.LENGTH_LONG).show();                 }             };
        }.execute();
    }
}

图片 11😉

 

代码说明:

1、DbHelper在源码里被起。

2、如果项目无法编译通过,请小心设置项目的字符编码、JDK版本、Android的本子。

 

三、总结

5.1 优点

a).
完全面向对象开发

b).
降低项目之复杂度,减少引入其他框架所带来的错综复杂

c).
非常适合一个出服务端和客户端

尽的施用的框架的风味,提交支付效率,适合中小型项目长足支付。

5.2 缺点

a).
注意服务端与客户端共用id的题目

5.3 其他

a).
ormlite支持标准的JPA助记符,这里。这样服务端采用Hibernate应该为是好的,有日可以做一个重组例子看看。

b).
测试发现所有框架为适用于SAE,如果一个人数承担客户端和服务端,那就绝甜蜜了!

 

四、下载

AndroidFramework2013-03-05.zip

 

结束

探讨永无止境!

网站地图xml地图