一个牛逼哄哄的Android框架One
##One框架能帮您带来什么?
-
One框架分为两个项目,OneCore为核心工程,androidOne为演示项目,依赖oneCore核心
-
One整个框架为MVC模式搭建,基于android framework为核心,集成Android世界中的主流技术选型
-
以Pragmatic风格的Android应用参考示例,是android项目最佳实践的总结与演示
-
以“复杂的世界里,一个就够了”为理念,励志帮助Android开发人员快速搭建一个简单高效的android开发框架!
##异步模块:
-
封装EventBus类,将异步框架单独抽出来,任何耗时操作(不仅仅是网络请求)都可以放到异步模块里
-
与网络模块分离实现,可以直接写单元测试类测试接口,让接口调试更方便
-
支持多并发、取消操作
-
多个请求,一个回调接口处理,让页面代码更简洁
-
建议一般在BaseActivity、BaseFragment中实现
-
实现参考类 AsyncTaskManager.java
-
使用参考类 BaseActivity.java
-
使用参考类 BaseFragment.java
-
##HTTP请求模块:
-
采用第三方AsyncHttpClient方案,支持http、https方式,支持get、post、put、delete方法,支持GZIP、File格式,支持Retry、Cacel策略,堪称完美!
-
改造实现SyncHttpClient,支持同步,并支持RESTFUL风格,调接口时可直接单元测试
- 实现参考类 SyncHttpClient.java
##DownloadManager资源下载模块
- 改造实现BreakpointHttpResponseHandler支持多并发、多文件上传、断点续传、暂停、继续、删除下载任务
/**
* [下载器管理类,支持并发、暂停、继续、删除任务操作以及断点续传]
*
DownloadManager downloadMgr = DownloadManager.getInstance();
downloadMgr.setDownLoadCallback(new DownLoadCallback(){
@Override
public void onLoading(String url, int bytesWritten, int totalSize) {
super.onLoading(url, bytesWritten, totalSize);
}
@Override
public void onSuccess(String url) {
super.onSuccess(url);
}
@Override
public void onFailure(String url, String strMsg) {
super.onFailure(url, strMsg);
}
});
//添加下载任务
downloadMgr.addHandler(url);
*
**/
##Common模块:
-
页面堆栈管理ActivityPageManager
-
各种自定义dialog
-
支持hybrid开发
-
各种工具类
-
各种动画效果
##CacheManager缓存管理:
- 磁盘缓存,缓存对象需实现序列化接口,提供读取、失效,清除方法。一般用于对接口数据的缓存。
/**
* 缓存使用示例
*
* @return
* @throws HttpException
*/
public AdResponse getAdList() throws HttpException {
AdResponse response = null;
RequestParams params = getRequestParams();
params.put("method", "fmms.getAdvertisementList");
params.put("data", "{}");
//根据请求得到唯一的缓存Key
String key = getCacheKey(AdResponse.class.getSimpleName());
//读取缓存
if(CacheManager.isInvalidCache(key, INVALID_TIME_1DAY)){
response = CacheManager.readObject(key);
if(response != null && response.isSuccess()){
return response;
}
}
String result = httpManager.post(mContext, Constants.DOMAIN, getSignParams(params), ContentType);
if(!TextUtils.isEmpty(result)){
//一句话解析成对象
response = jsonToBean(result, AdResponse.class);
if(response != null && response.isSuccess()){
//获取数据成功,写入缓存
CacheManager.writeObject(response, key);
}
}
//最后都没有数据,还是从缓存中取
if(response == null){
response = CacheManager.readObject(key);
if(response != null && response.isSuccess()){
return response;
}
}
return response;
}
##系统异常处理:
- 集成BugTags,支持自动收集错误日志,在线提交测试bug。
##SharedPreferences管理:
- 支持直接put、get对象。
##LruCache管理:
- 封装LruCache,构造只缓存CACHE_SIZE大小的数量,超过CACHE_SIZE自动释放最前面的对象,建议页面传参之间使用。
##解析管理:
-
支持XML、JSON、JSOAP解析
-
一行代码轻松转JAVA对象
-
采用fastjson实现java、json互转
-
采用xstream实现Java、xml互转,支持注解解析
-
自主封装,支持soapObject转Java对象
-
##BroadcastManager广播管理:
- 为了发送广播更加方便,自主封装了BroadcastManager,方便好用。
/**
* [BroadcastManager使用示例]
*
//在任何地方发送广播
BroadcastManager.getInstance(mContext).sendBroadcast(FindOrderActivity.ACTION_RECEIVE_MESSAGE);
//页面在oncreate中初始化广播
BroadcastManager.getInstance(mContext).addAction(ACTION_RECEIVE_MESSAGE, new BroadcastReceiver(){
@Override
public void onReceive(Context arg0, Intent intent) {
String command = intent.getAction();
if(!TextUtils.isEmpty(command)){
if((ACTION_RECEIVE_MESSAGE).equals(command)){
//获取json结果
String json = intent.getStringExtra("result");
//做你该做的事情
}
}
}
});
//页面在ondestory销毁广播
BroadcastManager.getInstance(mContext).destroy(ACTION_RECEIVE_MESSAGE);
*
**/
##DB模块:
-
采用GreenDaoORM方案,直接实现Java Object的CURD方法就可以操作数据库,非常好用,极力推荐。
-
实现DBManager,连获取Dao的代码都不用写了,不管通过DaoGenerator生成的对象如何变化,通过DBManager可以让你拿到任何Dao对象,从而实现数据库操作。
-
DaoGenerator工程自动生成model、dao、session对象等代码,拷过来直接使用即可。
/**
* 数据库示例
*/
public void testDB(){
NoteDao dao = DBManager.getInstance(getContext()).getDaoSession().getNoteDao();
//add
for(int i=0; i<=4; i++){
Note bean = new Note();
bean.setComment("comment");
bean.setDate(new Date());
bean.setText("text");
dao.insert(bean);
}
//udpate
List<Note> list = dao.loadAll();
if(!list.isEmpty()){
Note bean = list.get(2);
bean.setComment("comment_comment");
dao.update(bean);
}
//query
if(!list.isEmpty()){
for(Note note : list){
NLog.e("testDemo", note.getComment());
}
}
//delete
if(!list.isEmpty()){
dao.delete(list.get(0));
}
}
##注解模块:
- 集成butterknife注解框架,一个No Magic的Android注入框架,用过的人都说好,极力推荐。
##支付模块:
-
集成支付宝支付和微信支付
- 支付宝示例:客户端封装参数,调用支付宝
String PARTNER = "2088XXXXXXXXXXXX"; String SELLER = "demo@yahoo.cn"; String RSA_PRIVATE = "私钥"; PayUtils payutils = new PayUtils(activity, PARTNER, SELLER, RSA_PRIVATE, "服务器回调订单地址[异步处理]"); payutils.setPayListener(new PayListener() { @Override public void onPayResult(int state, String message) { } }); try { payutils.pay("测试商品", "测试商品详情", "0.01", "唯一订单号,服务器生成"); } catch (Exception e) { e.printStackTrace(); }
- 支付宝示例:服务器封装所有的参数,返回url直接调用支付宝
PayUtils1 payutils= new PayUtils1(BespeakActivity.this, new PayListener() { @Override public void onPayResult(int state, String message) { switch (state) { case PayUtils1.PAY_SUC_CODE: MessageDialog dialog = new MessageDialog(mContext, getString(R.string.bespeak_order_suc)); dialog.setConfirmListener(new OnClickListener() { @Override public void onClick(View v) { BespeakActivity.this.finish(); } }); dialog.show(); break; case PayUtils1.PAY_DOING_CODE: case PayUtils1.PAY_GOODS_CODE: case PayUtils1.PAY_INIT_CODE: case PayUtils1.PAY_FAIL_CODE: NToast.shortToast(mContext, message); break; } } }); payutils.pay(res.getData().getUrl());
- 微信支付示例
PayReq payReq = res.getData().getPayReq(); payReq.packageValue = "Sign=WXPay"; IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null); msgApi.registerApp(Constants.WEIXIN_APP_ID); msgApi.sendReq(payReq);
##图片下载模块:
-
采用universal-image-loader解决方案,有关使用情况请参见@universal-image-loader
-
为了提供用户体验,建议在listview或者gridview在滑动的时候不加载图片
refreshlistview.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));
##结语
-
看到这里,估计您和您的小伙伴们都惊呆了吧!赶快动手试试吧!
-
具体使用请参考androidOne演示工程。
-
我改变不了这个世界!这个世界也休想将我改变!
-
如果任何问题或者建议,欢迎沟通。
-
QQ群:195104825