# iBase **Repository Path**: ZBL-Kiven/iBase ## Basic Information - **Project Name**: iBase - **Description**: 集合权限管理、网络封装、上拉下拉、IOC、缓存等项目框架为一体的高效开发框架,详情可看README - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2018-07-13 - **Last Updated**: 2020-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # iBase ### 项目介绍 ##### Android项目框架集合,该框架包含了以下功能: ## 一、Base ### 1、权限请求框架:com.zj.base.permission ##### 兼容Android 2.2 - 8.0 ,已通过多种主流机型实际测试过,表现良好,任何版本均可以成功检测权限并请求授权; ##### 该框架的使用方式(比如,获取一个【非必需的读取联系人信息权限】与一个【必须的相机设备使用权限】)-> ##### 需要做的,只是在任何继承BaseActivity的子类上写上这么一句注解: @CheekPermissions(isForce = [false, true], value = [PermissionsManifest.READ_CONTACTS, PermissionsManifest.CAMERA]) class **Activity:BaseActivity(){ ....} ##### 就能完全体验权限框架功能了; ##### 那么,如果不在BaseActivity中使用呢?很简单,如下调用就可以了: PermissionTools.get().setPermissions(permissions).checkPermissions(listener); ##### permissions 可以是单个String 或String[],也可以是List ,同时 还可以是 Map, ##### 当然,也可以是List>,权限框架默认未指定的权限为非强制权限,即用户可以取消,强制权限会在用户不同意的情况下,弹出一个对话框(UI自行定制),并继续引导用户授权,若仍不同意,将在listener.onFail回调。 ##### 我有自己的封装框架,只想通过注解使用权限框架怎么办? 也很简单,在你自己封装的Base类或公共基类中,调用如下方法就可以了; PermissionTools.get().parseAnnotationPermissionsAndRequst(new OnPermissionCheckListener()); ##### 然后你就可以尽情的在其子类使用注解方式管理权限了; ###### ps:使当前抽象类Implement OnPermissionCheckListener,就可以在子类随时管理权限交互的回调了; ##### 建议将权限关联逻辑写在listener.success中,确保权限沙盒保护用户不授权的情况下不会调用后续逻辑导致APP Crash; ##### 关联Activity的生命周期,可以很灵活的实现权限管理哦; ### 2、网络请求封装(基于 OkHttpUtils,具体内核可根据项目需求自行更换,基本没有粘连性和耦合性): #### 继承BaseRequestActivity即可自动使用,若其它场景,只需让类实现接口 OnHttpDataReceiveIn即可; ##### 像下面这样,就自动帮你将网络请求处理完成了,并且成功转换成 "WhatBean" 对象,其中,CODE是一个标识,你可以在数据回调中根据Code处理事件; HttpClient.get(CODE, DATA_IN, WhatBean::class.java).url(url).send() HttpClient.post(CODE, DATA_IN, WhatBean::class.java).url(url).send() ##### 如果是这样,就会把JSON字符串返回给你,当然了,也等同于第三个参数传入String或null的效果; HttpClient.get(CODE, this@MainActivity).url(url).send() ##### 加个参数吧? .params(params) ##### 没网络怎么办呢?照样可以展示最近一次的数据; .cacheEnable(boolean isGet,boolean isSave) //举个例子:isGet 没有数据展示的情况下加载,已有数据展示了就不用啦,isSave 下拉加载更多肯定不用去刷新缓存数据啊; ##### 网络请求场景太多,怎么区分上拉加载、下拉刷新、还是缓存数据呢? .dataType(type) ##### 最终回调会保留你的dataType,你可以通过它知道你的数据到底是什么情况下得来的,方便更新UI; ##### Cookie不能忽略: .cookie(Map) ##### 超时也可以: .timeOut(long timeOut) #### 仅仅这样肯定是不可能的,它当然支持上传下载了; //上传 HttpClient.post(CODE, DATA_IN).upLoad("keys",Map<"fileName",file>,PostRequestBuilder.OnFileCheek{ //这里很重要,你传入的文件找不到或已损坏时,该回调启用,你可以通过返回值控制它忽略或是退出任务; }); //下载 HttpClient.get(CODE,this@MainActivity).download("Path","FileName") //只要Path可用,即可成功下载; ### BaseLoading封装 ##### 这篇完全可以看我的另一个开源项目,BaseLoadingView,并可以在这个框架中一起探讨它的封装使用方式; ## 二、框架 ### IOC框架 com.zj.base.view_injector #### 注解框架,使用方式与第三方注解框架类似,好在轻量,兼容性高(运行时注解),使用eg: @IdRes(R.id.base_title) private val textView:TextView? = null @LayoutRes(R.layout.activity_main) class MainActivity extends BaseActivity{....} ##### 支持对Fragment、View、Activity的注解及解析; ### Recycler、Adapter框架 #### 比多数目前能找到的框架好用,是因为它的轻量级和高扩展性;最快的数据适配如下: main_rv?.setData(R.layout.item_adapter,isLoadMore, beans, object : BaseAdapterDataSet() { override fun initData(holder: BaseViewHolder?, position: Int, module: MoreCommentInfo.HomeCommentInfo?) { holder?.setText(R.id.item_tvName, module?.title) holder?.setImage(R.id.item_iv, module?.imageLink) } }) ##### 当然,若你有其他复杂需求实现,完全可以继承BaseAdapter,写出自家的需求。 ##### 若固定列表展示、实现数据绑定也就仅此几行代码而已,还附带下拉刷新逻辑判断哦; ##### 详情还是在我的另一个开源项目 zj_List 中,且在那个demo,包含了高度定制化的,基于各路大神总结并开源的上拉刷新、下拉加载控件。 ### fragment框架 #### 基本使用: BaseFragmentManager(this, indexParentView, container, defaultIndex,Fragments...) #### 即可完成关联,但是要求indexParentView内的Child数量必须和fragment数量一样,否则不等系统报IndexOutOfBounds,我先来个IllegalStateException; #### 支持延时加载,支持重复点击监听,支持初始化回调,支持index校正; #### Over,看上拿走! ##### 该框架完全开源,可根据自身项目定制更改,一些地方有更好建议或吐槽的,欢迎Issue或留言,请使用者或参观者留下宝贵的Star 或 Fork,在此感激不尽;