Android 牛逼哄哄的快速开发框架AndroidOne,秒杀最火的Xutils

韩寒sss 2016-01-04 06:02:36
你还在为 App 开发技术选型而烦恼吗?你还在每天花大量的时间在写重复的代码上吗?没错! 今天就是要给大家分享一款能节省大量时间 省去很多重复代码coding 专注于逻辑思考的开发框架 oneCore 闪亮登场~!

一个牛逼哄哄的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支持多并发、多文件上传、断点续传、暂停、继续、删除下载任务

[code] /**
* [下载器管理类,支持并发、暂停、继续、删除任务操作以及断点续传]
*
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);
*
**/


BluetoothManager蓝牙处理模块

[code] /**
* [蓝牙管理类]
*
*/
BluetoothManager bluetoothManager = BluetoothManager.getInstance(new BluetoothCallBack(){
@Override
public void onStateChange(int bluetoothState, String message) {
switch(bluetoothState){
//蓝牙不可用
case BluetoothService.STATE_UNAVAILABLE:
NToast.shortToast(mContext, "蓝牙不可用");
break;

//蓝牙未连接
case BluetoothService.STATE_NONE:
NToast.shortToast(mContext, "蓝牙未连接");
break;

//蓝牙空闲
case BluetoothService.STATE_LISTEN:
break;

//蓝牙正连接
case BluetoothService.STATE_CONNECTING:
NToast.shortToast(mContext, "蓝牙正连接");
break;

//蓝牙已连接, 当如果连接上了,message就是蓝牙的名称
case BluetoothService.STATE_CONNECTED:
NToast.shortToast(mContext, "蓝牙已连接");
mBluetoothState = true;
break;
}
}

@Override
public void onResult(int requsetCode, String data) {
//回调结果在页面显示

}
});

//发送蓝牙请求
bluetoothManager.request(SEND_INL_CODE, charStr);

//断开
bluetoothManager.stop();


Common模块

页面堆栈管理ActivityPageManager

各种自定义dialog

支持hybrid开发

各种工具类

各种动画效果

SharedPreferences管理

支持直接put、get对象。

LruCache管理

封装LruCache,只缓存CACHE_SIZE大小的数量,超过CACHE_SIZE自动释放前面的对象,建议页面间传参使用。

Exception系统异常处理

Bugtags是新一代的、专为移动测试而生的缺陷发现及管理工具。移动App集成Bugtags SDK后,测试人员就可以直接在App里所见即所得的提交 bug,SDK会自动截屏、收集App运行时数据,如:设备信息,控制台数据,用户的操作步骤等,团队人员在Bugtags云端高效的跟踪及管理bug。

Parse解析管理

支持XML、JSON、JSOAP解析

一行代码轻松转JAVA对象

采用fastjson实现java、json互转

采用xstream实现Java、xml互转,支持注解解析

自主封装,支持soapObject转Java对象

CacheManager缓存管理

磁盘缓存,缓存对象需实现序列化接口,提供读取、失效,清除方法。一般用于对接口数据的缓存。

[code] /**
* 缓存使用示例
*
* @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;
}


BroadcastManager广播管理

为了发送广播更加方便,自主封装了BroadcastManager,方便好用。

[code] /**
* [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对象等代码,拷过来直接使用即可。

[code] /**
* 数据库示例
*/
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注入框架,用过的人都说好,极力推荐。

支付模块

集成支付宝支付和微信支付

支付宝示例:客户端封装参数,调用支付宝

[code] 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直接调用支付宝

[code] 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());


微信支付示例

[code] 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在滑动的时候不加载图片

[code]refreshlistview.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));


日志

NLog日志输出类

config.properties文件(assets文件夹下)配置日志开关

[code]#is debug mode, if debug is true that log is open, if debug is false that log is close.
debug=true


教程

优酷视频教程地址,非常感谢融云阿明的辛苦录制!

PPT手把手教程地址

结语

看到这里,估计您和您的小伙伴们都惊呆了吧!赶快动手试试吧!

具体使用请参考androidOne演示工程。

我改变不了这个世界!这个世界也休想将我改变!

如果任何问题或者建议,欢迎沟通。

...全文
2087 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
老王爱上猫 2016-04-25
  • 打赏
  • 举报
回复
mark......
xiaohuh421 2016-04-25
  • 打赏
  • 举报
回复
https://github.com/devinhu/androidone github开源地址
xiaohuh421 2016-04-25
  • 打赏
  • 举报
回复
http://forum.android-studio.org/forum.php?mod=viewthread&tid=501 这里有地址.
refree_sci 2016-04-23
  • 打赏
  • 举报
回复
链接在哪里。。。。
damonbrave 2016-03-02
  • 打赏
  • 举报
回复
十分强大的框架!专为app初始开发准备!为集成开发人员赞一个!!!
孤独的秋色 2016-01-19
  • 打赏
  • 举报
回复
lianjie
王_健 2016-01-15
  • 打赏
  • 举报
回复
链接在哪呀大神
藏于天地 2016-01-15
  • 打赏
  • 举报
回复
huangxiaohu_coder 2016-01-05
  • 打赏
  • 举报
回复
感谢分享,mark
KE南 2016-01-05
  • 打赏
  • 举报
回复
要是能自己选择需要的功能模块再导入就比较吊了。一下都导入了有些是用不到的。
这不是鸭头 2016-01-04
  • 打赏
  • 举报
回复
感谢分享
xUtils简介 xUtils 包含了很多实用的android工具。 xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.2 (api level 8) 目前xUtils主要有四大模块: DbUtils模块: android中的orm框架,一行代码就可以进行增删改查; 支持事务,默认关闭; 可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名); 支持绑定外键,保存实体时外键关联实体自动保存或更新; 自动加载外键关联实体,支持延时加载; 支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。 ViewUtils模块: android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定; 新的事件绑定方式,使用混淆工具混淆后仍可正常工作; 目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。 HttpUtils模块: 支持同步,异步方式的请求; 支持大文件上传,上传大文件不会oom; 支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求; 下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件; 返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。 BitmapUtils模块: 加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象; 支持加载网络图片和本地图片; 内存管理使用lru算法,更好的管理bitmap内存; 可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等... 使用xUtils快速开发框架需要有以下权限: android:name="android.permission.INTERNET" /> android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

80,360

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧