/Wilderness-survival-Android-NetWorkLibrary

⚡️Wilderness-survival-Android-NetWorkLibrary(荒野求生之Android网络库) 封装了retrofit+rxjava+okhttp+gson方便你轻松获取荒野中的各种资源!

Primary LanguageJava

版本号 修改人 时间 备注 5.4 简雨山舍 2019-4-28

功能一:网络请求

1.集成步骤

在gradle中添加引用

llprojects {
		repositories {
			...
			maven { url 'https://www.jitpack.io' }
		}
	}
	
dependencies {
	     implementation 'com.github.jianyushanshe:Wilderness-survival-Android-NetWorkLibrary:5.4'
	}

2.使用方法

2.1在Application的onCreate方法中初始化

 //初始化ApiBox
        ApiBox.Builder builder = new ApiBox.Builder();
        builder.application(this)
                .debug(BuildConfig.DEBUG)//是否是debug模式
                .connetTimeOut(30000)//连接超时时间
  		.delayTimeShowLoading(3000)//延时显示loading,加载超过该时间会显示loading,该时间内加载完成,则不显示loading
                .readTimeOut(30000)//读取超时时间
                .jsonParseExceptionCode(1003)//json解析异常标识
                .successCode(200)//访问成功标识
                .tokenExpiredCode(406)//token过期,重新登录标识
                .unknownExceptionCode(1000)//未知异常标识
                .build();

2.2:network包中创建请求的interface类

例如:

public interface AccountApi {
   //登录
    @GET(".")
    Flowable<UserEntity> login(@QueryMap TreeMap<String, String> map);
}

2.3:network包中创建一个类,实例化2.2中创建的interface。

例如:

public class AccountNetwork {
  
    public static AccountNetwork accountNetwork;
    private static AccountApi accountApi;

    private AccountNetwork() {
    }
	//单例
    public static synchronized AccountNetwork get() {
        if (accountNetwork == null) {
            accountNetwork = new AccountNetwork();
        }
        if (accountApi == null) {
          accountApi = ApiBox.getInstance().createService(AccountApi.class, HttpUrl.Base_Url);
        }
        return accountNetwork;
    }

    /**
     * @功能:登录
     * @param:
     * @return:
     */
    public Flowable<UserEntity> login(String userName, String userPassword) {
        // 添加参数到集合
        TreeMap<String, String> tMap = new TreeMap<>();
        tMap.put("username", userName);
        tMap.put("pwd", userPassword);
        Flowable<UserEntity> observable = accountApi.login(tMap);
        return observable;
    }

}

2.4 repository包中创建一个类,进行数据请求和处理

例如:

Public class LoginRepository extends BaseRepository<LoginContract.Presenter, LoginContract.View> implements LoginContract.Repository {
    /**
     * LoginRepository构造方法
     *
     * @param presenter
     */
    public LoginRepository(LoginContract.Presenter presenter, LoginContract.View view, Activity context) {
        super(presenter, view, context);
    }
    /**
     * 登录操作,异步网络请求,请求成功将返回数据交给Presenter做业务处理
     */
    @Override
    public void userLogin(String name, String pwd) {
        //一般弹的失败情况已处理,若需改写重写 onUserError 并去掉super(xx).
     BaseSubscriber<ResBase> subscriber = new BaseSubscriber<ResBase>(context, view) {
            @Override
            protected void onUserSuccess(ResBase resBase) {
            //请求成功返回的数据
                UserEntity userEntity = new UserEntity();
                userEntity.state = 1;
                userEntity.userName = "用户名";
                userEntity.userPassword = "用户密码";
                presenter.upData(userEntity);
            }

            @Override
            protected void onUserError(CommonException ex) {
                super.onUserError(ex);
                //请求错误,需要用户处理的异常
            }

            @Override
            protected void onUnifiedError(CommonException ex) {
                super.onUnifiedError(ex);
                //请求错误,系统级别异常
            }
        };
        //一个请求
        //RxUtils.<UserEntity>getScheduler(true, view)参数1,是否显示loading;参数2,显示loading的view
        Disposable disposable = AccountNetwork.get()
                .login(name, pwd)
                .compose(RxUtils.<UserEntity>getScheduler(true, view))
                .subscribeWith(subscriber);
        //添加到订阅集合中,在activity或fragment,onDestroy时取消
        rxManage.add(disposable);
    }
}

2.5 在BaseActivity中,继承ILoading 接口,重写reLogin重新登录的方法、showLoading加载进度显示方法和dismissLoading隐藏进度显示方法

   /**
     * 重新登录,网络库里面会调用
     *
     * @param context
     * @param s
     */
    @Override
    public void reLogin(Context context, String s) {
        //重新登录需要做的操作
    }

  @Override
    public void showLoading() {
   //显示加载的进度
    }
  @Override
    public void dismissLoading() {
       //隐藏进度显示
    }

2.6在onDestory方法中清除所有订阅

rxManage.clear();//清空所有订阅

功能二:网络状态监听

1.在BaseActivity的onCreate中注册网络状态监听广播

	 if (netWorkBroadcastReceiver == null) {
            netWorkBroadcastReceiver = new NetWorkBroadcastReceiver(this);
        }
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(netWorkBroadcastReceiver, intentFilter);//注册广播
    

2.在BaseActivity的onResume中调用网络状态检测方法,检测当前网络状态,做相应的操作

if (NetWorkUtil.isNetConnected(getApplicationContext())) {
           //网络连接
        } else {
           //网络未连接
        }

3.BaseActivity继承IInvalid接口,重写showNetWorkState方法,在showNetWorkState方法中根据isConnect判断网络是否连接。

    @Override
    public void showNetWorkState(boolean isConnect) {
        tvInfo.setText("网络状态变化:网络是否连接---" + isConnect);
    }

4.在onDestory方法中,解除注册广播

      unregisterReceiver(netWorkBroadcastReceiver);