[转]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
项目工截图(服务端)

PHP 1

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

 

3.2
重点代码分析

3.2.1 服务端

web.xml

PHP 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>

PHP 3😉

 

StartupInit.java

PHP 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)
{
    }
}

PHP 5😉

代码说明:

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

POUser.java

PHP 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() {
    }
}

PHP 7😉

代码说明:

留神要一个缺损的构造函数,其他请参见ormlite资料。

 

UserServlet.java

PHP 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;     }
}

PHP 9😉

 

3.2.2 客户端(Android)

PHP 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);         PHP            }
                    Toast.makeText(UserActivity.this, “” + result.msg,
Toast.LENGTH_LONG).show();                 }             };
        }.execute();
    }
}

PHP 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

 

结束

深究永无止境!

相关文章