Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite) 前言 结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文。使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极大的减少了CRUD
Android项目快速开发框架探索(Mysql + OrmLite + Hessian + Sqlite)前言
结合之前所用的ormlite和hessian,再加上SAE已经支持JAVA,把服务端切换到JAVA,也就有了本文。使用hessian来做数据传输,ormlite来实现客户端与服务端的数据存储,极大的减少了CRUD工作。本文为探索贴,未正式用于大型项目,欢迎大家讨论使用!
?
声明
欢迎转载,但请保留文章原始出处:)
ITEYE:http://www.iteye.com/
农民伯伯: http://www.cnblogs.com/over140/?
?
正文
一、简介
1.1ormlite
Ormlite[Object Relational Mapping Lite (ORM Lite)]
对象关系映射精简版(精简版的ORM)提供了一些简单的,轻量级持久化Java对象到SQL数据库,同时也避免了复杂性和更多的标准的ORM包的开销的功能。
支持数据库的jdbc调用,当然,最重要的肯定是它支持android原生的数据库api调用sqlite。
——转载自这里。?
1.2hessian?
使用方法参照本博两篇文章:
[hessdroid]Android下使用Hessian与Java服务端通讯?
[hessdroid]Android下使用Hessian与Java服务端通讯的传值测试?
?
1.3Android快速开发框架说明
考虑如下几个特点:
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

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>userservlet-name>
????????servlet-class>com.nmbb.ho.server.servlet.UserServletservlet-class>
????servlet>
????servlet-mapping>
????????servlet-name>userservlet-name>
????????url-pattern>/user.dourl-pattern>
????servlet-mapping>
????
????listener>
????????listener-class>com.nmbb.ho.server.StartupInitlistener-class>
????listener>
web-app>

?
StartupInit.java

????@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

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
????????????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
????????return?new?OrmliteHelper
????}
????/**
?????*?判断字符串是否为空
?????*?
?????*?@param?str
?????*?@return
?????*/
????public?static?boolean?isEmpty(String?str)?{
????????return?str?==?null?||?str.length()?==?0;
????}
}

?
3.2.2客户端(Android)??

????@Override
????protected?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.main);
????}
????public?void?OnClickRegiger(View?view)?{
????????new?AsyncTask
????????????@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
????????????????????}
????????????????????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中的轮询是一项关键技术,它允许应用程序定期从服务器或数据源检索和更新信息。通过实施轮询,开发人员可以确保实时数据同步并向用户提供最新的内容。它涉及定期向服务器或数据源发送请求并获取最新信息。Android提供了定时器、线程、后台服务等多种机制来高效地完成轮询。这使开发人员能够设计与远程数据源保持同步的响应式动态应用程序。本文探讨了如何在Android中实现轮询。它涵盖了实现此功能所涉及的关键注意事项和步骤。轮询定期检查更新并从服务器或源检索数据的过程在Android中称为轮询。通过

为了提升用户体验并防止数据或进度丢失,Android应用程序开发者必须避免意外退出。他们可以通过加入“再次按返回退出”功能来实现这一点,该功能要求用户在特定时间内连续按两次返回按钮才能退出应用程序。这种实现显著提升了用户参与度和满意度,确保他们不会意外丢失任何重要信息Thisguideexaminesthepracticalstepstoadd"PressBackAgaintoExit"capabilityinAndroid.Itpresentsasystematicguid

1.java复杂类如果有什么地方不懂,请看:JAVA总纲或者构造方法这里贴代码,很简单没有难度。2.smali代码我们要把java代码转为smali代码,可以参考java转smali我们还是分模块来看。2.1第一个模块——信息模块这个模块就是基本信息,说明了类名等,知道就好对分析帮助不大。2.2第二个模块——构造方法我们来一句一句解析,如果有之前解析重复的地方就不再重复了。但是会提供链接。.methodpublicconstructor(Ljava/lang/String;I)V这一句话分为.m

如何将WhatsApp聊天从Android转移到iPhone?你已经拿到了新的iPhone15,并且你正在从Android跳跃?如果是这种情况,您可能还对将WhatsApp从Android转移到iPhone感到好奇。但是,老实说,这有点棘手,因为Android和iPhone的操作系统不兼容。但不要失去希望。这不是什么不可能完成的任务。让我们在本文中讨论几种将WhatsApp从Android转移到iPhone15的方法。因此,坚持到最后以彻底学习解决方案。如何在不删除数据的情况下将WhatsApp

原因:1、安卓系统上设置了一个JAVA虚拟机来支持Java应用程序的运行,而这种虚拟机对硬件的消耗是非常大的;2、手机生产厂商对安卓系统的定制与开发,增加了安卓系统的负担,拖慢其运行速度影响其流畅性;3、应用软件太臃肿,同质化严重,在一定程度上拖慢安卓手机的运行速度。

1.启动ida端口监听1.1启动Android_server服务1.2端口转发1.3软件进入调试模式2.ida下断2.1attach附加进程2.2断三项2.3选择进程2.4打开Modules搜索artPS:小知识Android4.4版本之前系统函数在libdvm.soAndroid5.0之后系统函数在libart.so2.5打开Openmemory()函数在libart.so中搜索Openmemory函数并且跟进去。PS:小知识一般来说,系统dex都会在这个函数中进行加载,但是会出现一个问题,后

苹果公司周二向开发人员发布了iOS 16.2 beta 2,因为该公司准备在 12 月向公众提供更新。正式地,它添加了新的 Freeform 协作应用程序和对 Home 应用程序的改进。在后台,9to5Mac发现 Apple 一直在开发一种新的“自定义辅助功能模式”,该模式将为 iPhone 和 iPad 提供“流线型”体验。自定义辅助功能模式这种代号为“Clarity”的新模式基本上用更精简的模式取代了 Springboard(这是 iOS 的主要界面)。该功能在当前测试版中仍对用户不可用,将


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),