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

HOLib共用于客户端和服务端,保证接口和数据对象一致性。
3.2 重点代码分析
3.2.1 服务端
web.xml
<?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>
StartupInit.java
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) {
}
}
代码说明:
StartupInit可用于创建数据库表结构,这里用于测试,真实环境注意数据丢失问题。
POUser.java
@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() {
} }
代码说明:
注意需要一个空的构造函数,其他请参考ormlite资料。
UserServlet.java
/** * 用户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; } }
3.2.2 客户端(Android)
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();
} }
代码说明:
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
结束
探索永无止境!
[转]Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)的更多相关文章
- android的快速开发框架集合
出自:http://blog.csdn.net/shulianghan/article/details/18046021 1.Afinal (快速开发框架) 简介:http://www.oschin ...
- XDroidMvp 轻量级的Android MVP快速开发框架
XDroidMvp是XDroidAndroid快速开发框架的MVP版本,其使用方式类似于XDroid,大部分源码也来自XDroid. XDroidMvp主要会有这些特性: 无需写Contract! 无 ...
- 【Android】Android的快速开发框架Afinal
Afinal简介 Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp. 通过finalA ...
- MyBatis项目快速搭建及MySQL一个Statement支持多条命令参数
一.简述 本文以笔记的形式,记录一个基本Mybatis项目的使用,方便后期项目使用到相关配置时直接复制使用. 二.项目结构 pom.xml中的依赖 <!-- https://mvnreposit ...
- Android的快速开发框架afinal
afinal 是一个android的 orm 和 ioc 框架.而且封装了android中的httpClient,使其更加简单易用. afinal是android应用开发的终极框架. FinalDB使 ...
- Android的快速开发框架 afinal
afinal 框架学习: http://www.oschina.net/p/afinal
- Base-Android快速开发框架(三)--数据存储之SQLite
SQLite,是一款轻量级的关系型数据库,Android原生集成的一个数据库.具有轻量级.独立性.隔离性.安全性等特点.是Android做数据存储的必备知识之一. 在实际的项目中,我们常用于一些对象的 ...
- 64.GitHub 排名前100的android项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
- gitHub优秀android项目
转自:http://blog.csdn.net/shulianghan/article/details/18046021 主要介绍那些不错个性化的View,包括ListView.ActionBar.M ...
随机推荐
- linux core文件设置
http://blog.csdn.net/ctthuangcheng/article/details/8963551 linux core文件设置 分类: Linux OS Debugging Te ...
- form怎样正确post文件
form在HTML中,是用于收集用户输入的,基本全部浏览器都支持form.给form加入method属性.就能实现将用户在form内控件输入的信息POST到制定地址.或发送GET请求. 写了以下一段代 ...
- Java SE之break和continue标签
文是学习网络上的文章时的总结,感谢大家无私的分享. Java没有提供goto功能,可是保留了gotokeyword. 在java中能够使用break标签和continue标签功能实现简版的goto功能 ...
- 设置清除html5页面缓存
设置清除html5页面缓存 html5端设置 meta 标签: <meta http-equiv="Pragma" content="no-cache" ...
- http://www.freetds.org/userguide/what.htm
FreeTDS is re-implementation of C libraries originally marketed by Sybase and Microsoft SQL Server. ...
- jdbc 操作步骤
package org.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLExcept ...
- Knn算法C++实现
相对简单的模拟.C++11 /* *********************************************** Author :guanjun Created Time :2016/ ...
- YTU 2983: 小明的生机!
2983: 小明的生机! 时间限制: 1 Sec 内存限制: 128 MB 提交: 16 解决: 2 题目描述 小明陷入一个充满陷阱的密道之中,现在他要逃脱这里!到达密道的指定位置即可离开这处绝境 ...
- AutoIT: 对数据库的访问,数据提取操作
#include<array.au3> $conn= ObjCreate("ADODB.Connection") $RS= ObjCreate("ADODB. ...
- WinHTTrack
看过<大湿教我写.net通用权限框架(1)之菜单导航篇>之后发生的事 http://www.cnblogs.com/wolf-sun/p/3436585.html 用此工具下载别人整站的图 ...