美文网首页
Android项目的网络框架

Android项目的网络框架

作者: 撩人的风光 | 来源:发表于2019-10-02 12:01 被阅读0次

话不多说。

先依赖我们的框架

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)就可以了

希望大神能够帮我继续完善框架的内容,联系我的简书,谢谢

GitHub地址:https://github.com/SongWenjun66/Shelf/tree/v1.0.1

相关文章

网友评论

      本文标题:Android项目的网络框架

      本文链接:https://www.haomeiwen.com/subject/awglpctx.html