Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

One整个框架为MVC模式搭建,基于android framework为核心,集成Android世界中的主流技术选型, 以Pragmatic风格的Android应用参考示例,是android项目最佳实践的总结与演示。 以"复杂的世界里,一个就够了"为理念,励志帮助Android开发人员快速搭建一个简单高效的android开发框架。

Notifications You must be signed in to change notification settings

devinhu/androidone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

157 Commits

Repository files navigation

一个牛逼哄哄的Android框架One

##One框架能帮您带来什么?

  • One框架分为两个项目,OneCore为核心工程,androidOne为演示项目,依赖oneCore

  • One整个框架为MVC模式搭建,基于android framework为核心,集成Android世界中的主流技术选型

  • 以Pragmatic风格的Android应用参考示例,是android项目最佳实践的总结与演示

  • 以"复杂的世界里,一个就够了"为理念,励志帮助Android开发人员快速搭建一个简单高效的android开发框架!

##异步模块

  • 封装EventBus类,将异步框架单独抽出来,任何耗时操作(不仅仅是网络请求)都可以放到异步模块里

  • 与网络模块分离实现,可以直接写单元测试类测试接口,让接口调试更方便

  • 支持多并发、取消操作

  • 多个请求,一个回调接口处理,让页面代码更简洁

  • 建议一般在BaseActivity、BaseFragment中实现

##HTTP请求模块

  • 采用第三方AsyncHttpClient方案,支持http、https方式,支持get、post、put、delete方法,支持GZIP、File格式,支持Retry、Cacel策略,堪称完美!

  • 改造实现SyncHttpClient,支持同步,并支持RESTFUL风格,调接口时可直接单元测试

##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);
	* 
	**/

##BluetoothManager蓝牙处理模块

	/**
	 * [蓝牙管理类]
	 * 
	 */
	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缓存管理

  • 磁盘缓存,缓存对象需实现序列化接口,提供读取、失效,清除方法。一般用于对接口数据的缓存。
 /**
 * 缓存使用示例
 * 
 * @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,方便好用。
	/**
	 * [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模块

  • 采用GreenDao详见ORM方案,直接实现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);

##图片下载模块

  • 采用Fresco解决方案,有关使用情况请参见Fresco详见

  • 内存管理、图片的渐进式呈现、Gif图和WebP格式强大的特性让你不能自拔!特性详见

##日志

  • NLog日志输出类
  • config.properties文件(assets文件夹下)配置日志开关
#is debug mode, if debug is true that log is open, if debug is false that log is close.
debug=true

##教程

##常用网址推荐 Android开发技术周报

http://www.androiddevtools.cn/

android-studio中文站

android-开源项目

##结语

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

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

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

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

  • QQ群:195104825

  • AndroidOne GitHub地址:https://github.com/devinhu/androidone

About

One整个框架为MVC模式搭建,基于android framework为核心,集成Android世界中的主流技术选型, 以Pragmatic风格的Android应用参考示例,是android项目最佳实践的总结与演示。 以"复杂的世界里,一个就够了"为理念,励志帮助Android开发人员快速搭建一个简单高效的android开发框架。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /