美文网首页
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