话不多说。
先依赖我们的框架
1.在项目的bulid中添加,注意必须添加到allproject当中,这是引入我们的jitpack.io库
allprojects {
repositories {
...
maven {
url 'https://jitpack.io'
}
}
}
2.添加依赖
implementation 'com.github.SongWenjun66:Shelf:v1.0.1'
3.这样同步项目之后会报错
More than one file was found with OS independent path 'META-INF/rxjava.properties'
这个问题很好解决添加代码到项目的bulid当中
android{
...
packagingOptions{
exclude 'META-INF/rxjava.properties'
}
}
这样就解决了这个问题了。
那么我们已经把框架集成到项目中了,接下来我来带大家一起使用。
第一步,我们需要定义一个Applocation来继承我的OverAppLocation,并注册applocation。
public class OverAppLocation extends Application {
private static OverAppLocation overAppLocation;
public static OnParInterfices onParInterfices;
public Context context;
private static int startActivity = -1;//Activity的进场动画
private static int endActivity = -1;//Activity的出场动画
private static String BASE_URL = "http://www.songwenjun.top";
//初始化BASE_URL方法,使用时只需要继承我,然后调用我,传入你的baseurl就可以了
public static void setBaseUrl(String baseUrl) {
BASE_URL = baseUrl;
}
public static String getBaseUrl() {
return BASE_URL;
}
public static int getStartActivity() {
return startActivity;
}
//设置Activity的进场动画
public static void setStartActivity(@AnimRes int startActivity) {
OverAppLocation.startActivity = startActivity;
}
public static int getEndActivity() {
return endActivity;
}
//Activity的出长动画
public static void setEndActivity(@AnimRes int endActivity) {
OverAppLocation.endActivity = endActivity;
}
public static void setOnParInterfices(OnParInterfices onParInterfices) {
OverAppLocation.onParInterfices = onParInterfices;
}
public static OverAppLocation getOverAppLocation() {
return overAppLocation;
}
@Override
public void onCreate() {
super.onCreate();
context = this;
overAppLocation = this;
}
}
这就是我们OverAppLocation中的代码,我们可以看到,在applocation中我们可以初始化好多东西,比如初始化我们的BaseUrl、统一风格的Activity的进出场动画等等
初始化baseurl有两种方法
1、在自己的applocation当中调用setBaseUrl传入你的baseurl就可以了
2、在Applocation的类名上添加注解@BaseUrl("你的url"),并在oncreate中添加代码FrameInit.initBaseUrl(this);就可以了
初始化Activity的进出场动画,调用setStartActivity或setEndActivity并传入我们的动画文件id就可以了
那么我们开始使用框架
初始化接口公共参数和请求头
setOnParInterfices(new OnParInterfices(){
//实现抽象方法
})
首先,我们的框架适用于Activity、Fragment还有普通的类
网络请求
Activity中继承BaseNetActivity<CommonPresenter, CommonModule>
其中CommonPresenter超级P层 ,CommonModule超级M层
实现里面的抽象方法
protected abstract M createModule();
protected abstract P createPresenter();
public abstract int createLayout();
void onSuccess(RequestConfig requestConfig, ApiConfig apiConfig, T t);
void onError(RequestConfig requestConfig, ApiConfig apiConfig, String e);
createModule 创建超级M层的实例
createPresenter创建超级P层的实例
createLayout返回我们Activity的布局文件id
onSuccess网络请求成功的回调
onError网络请求失败的回调
看下最基本的Get和post请求
POST请求
Map<String, Object> map = new HashMap<>();
presenter.universalNode(RequestConfig.POST_DATA, ApiConfig.ONE,"这里放除了baseurl之后的网址", map);
universalNode方法存在于超级P层
@Overridepublic void universalNode(RequestConfig refreshConfig, ApiConfig apiConfig, Object... t)
RequestConfig 枚举类型里面存放着我们的请求方式
ApiConfig 枚举类型里面存放着这个请求是我们这个类的第几个网络请求
Object... 万能可变参数,里面第一个参数传入我们的后半段网址,第二个参数传入我们的请求参数
Fragment中用法一样但是继承我们的BaseNetFragment其他一样
网络请求还可以通过注解的方式进行请求
@RequestUrl("后半段路径")
@RequstType(RequestConfig.GET_DATA)
@ApiConfType(ApiConfig.ONE)
public void getData(Map<String, Object> map) {
RequestNet.getInstance().parseRequest(this, map);
}
调用这个方法就可以了,着方法是自己定义,只不过是通过注解的行进行网络请求
不需要请求的Activity和Fragment继承我们的BaseActivity和BaseFragment就可以了,我们的base基类当中封装了一下比较常用的方法
showToas(String msg);和showLongToast(msg);//运行在主线程和子线程
e(msg)这是log,他的TAG就是我们的直接子类的类名
finishAnimation()关闭当前Activity并使用统一风格的出场动画
finishAnimation(@DrawableRes int end)关闭当前Activity并使用特定风格的出长动画
openActivity(Class<?> tClass, Bundle bundle)跳转Activity,并使用动画
扩展封装方法,定义抽象类继承与我们的BaseNetActivity,进行扩展。
扩展我们的超级M层
创建类并实现我们的ICommmonModule接口进行扩展,并在Activity或者Fragment中继承BaseNetActivtiy,泛型需要传入超级P层,还有M层,这里的M层就使用我们自己扩展的M层就可以了
框架中还为我们封装了一些常用的工具类
框架内部封装了注解找控件,只需要继承我们base基类然后在需要找的控件上通过使用@BindView(控件的id)就可以了
希望大神能够帮我继续完善框架的内容,联系我的简书,谢谢
网友评论