项目作者: gaohanas

项目描述 :
这是一个基于MVP+Retrofit2+ RxLifecycle2 +Rxjava2的封装网络请求封装,已经对网络做了判断处理,可以直接在项目中使用
高级语言: Java
项目地址: git://github.com/gaohanas/Retrofit2.git
创建时间: 2019-04-22T00:59:35Z
项目社区:https://github.com/gaohanas/Retrofit2

开源协议:

下载


这是一个基于Retrofit2+RxJava2+MVP的封装,直接可以拉倒项目中自己使用,只需要修改一些基本的配置便可以使用

一、使用

1、添加依赖和配置

  • 根目录build.gradle文件添加如下配置:
  1. dependencies {
  2. classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
  3. }
  4. allprojects {
  5. repositories {
  6. mavenCentral()
  7. maven { url "https://jitpack.io" }
  8. maven { url "https://source.enncloud.cn/FNMobileTeam/Common_Android/raw/master" }
  9. }
  10. }
  • APP目录build.gradle文件添加如下配置:

```
apply plugin: ‘com.jakewharton.butterknife’

dependencies {
implementation ‘com.fanneng.android:common:1.0.0@aar
}

  1. #### 2、添加混淆
  2. >>

Retrofit2

-keepattributes Signature

Retain service method parameters.

-keepclassmembernames,allowobfuscation interface {
@retrofit2.http.
;
}

Ignore annotation used for build tooling.

-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

OkHttp3

-dontwarn okhttp3.
-dontwarn okio.

-dontwarn javax.annotation.
-dontwarn org.conscrypt.

A resource is loaded with a relative path so the package of this class must be preserved.

-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

EventBus

-keepattributes Annotation
-keepclassmembers class {
@org.greenrobot.eventbus.Subscribe ;
}
-keep enum org.greenrobot.eventbus.ThreadMode {
; }

Only required if you use AsyncExecutor

-keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
(java.lang.Throwable);
}

  1. #### 3、继承common类
  2. >>CommonApplication 初始化第三方框架

public class YourBaseApplication extend CommonApplication {

public String setBaseUrl(){
return “你的服务器地址,用于网络框架的访问”;
};
}

  1. >>CommonActivity 初始化工具类

public class YourBaseActivity extend CommonActivity {

}

  1. >>CommonFragment 初始化工具类

public class YourBaseFragment extend CommonFragment {

}

  1. <br><br>
  2. ## 二、功能介绍
  3. <br>
  4. #### 1、 Net 网络框架封装
  5. * 如何使用<br>
  6. >>1、在你的Api层配置,以登录接口为例
  1. public interface BaseApis {
  2. /**
  3. * 登陆接口
  4. */
  5. @POST(HEAD_HOST + "user/login")
  6. Observable<UserInfo> postLogin(@Body Map<String, Object> map);
  7. }
  1. >>2、在Service层提供访问方法

public class APIService extends BaseAPIService {

private final BaseApis mBaseApis;

private APIService() {
mBaseApis = RetrofitFactory.getInstance().create(BaseApis.class);
}

private static class APIServiceHolder {
private static final APIService INSTANCE = new APIService();
}

public static final APIService getInstance() {
return APIServiceHolder.INSTANCE;
}

//登陆接口
public Observable postLogin(String username, String code) {
Map map = new HashMap<>();
map.put(“username”, username);
map.put(“password”, code);
map.put(“equipment”, PhoneOnlyNumber.getPhoneOnlyID());
map.put(“equipType”, “android”);
return mBaseApis.postLogin(map);
}
}

  1. >>3、调用方法

APIService.getInstance()
.postLogin(phoneNum, code)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(activity.bindToLifecycle())
.subscribe(new BaseObserver() {
@Override
public void onSuccess(UserInfo response) {
v.loginSuccessful(response.getData());
}

  1. @Override
  2. public void onError(Throwable e) {
  3. v.showMsg(e.toString());
  4. }
  5. @Override
  6. public void onFail(UserInfo response) {
  7. v.showMsg(response.getMsg());
  8. }
  9. });
  1. >>4、如果App接口要使用token访问,则需要在登录之后设置app_token

ApiConfig.getInstance().setAppToken(app_token);

  1. <br>
  2. #### 2、utils工具类
  3. <br>
  4. * AppContextUtils
  5. >>

Context context = AppContextUtils.getContext();

  1. 可以获取全局Context对象
  2. 注意:凡是跟UI相关的,都应该使用Activity做为Context来处理(DialogstartActivityLayout Inflation);其他的一些操作可以使用ApplicationContext
  3. 引用ApplicationContext并不会导致内存泄漏。引用ActivityContext才会导致内存泄漏。
  4. #如果您是继承CommonActivity的,那么您可以在您的app中调用AppContextUtils.getActivity()可以获取到当前Activity对象。
  5. * DateUtils<br>
  6. >>针对日期处理的Utils,包括日期的格式化、判断等操作
  7. * EventBusMsg<br>
  8. >>EventBus传递内容的封装,举个栗子:

//tag:传递消息的标记
//T:索要传递的对象
1.EventBus.getDefault().post(new EventBusMsg(tag,T))
2.一个FirstActivity跳转到另一个SecondActivity发送事件
FirstActivity中发送事件:EventBus.getDefault().postSticky(new EventBusMsg(tag,T));
SecondActivity接收事件:
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN_ORDERED)
public void getMsg(EventBusMsg msg) {
if (tag.equals(msg.getTag())) {
you can do your what you want…
}
}

  1. * FileUtils<br>
  2. >>针对文件处理的辅助工具类
  3. * LogUtils<br>
  4. >>Log打印工具类,只会在Debug模式下才会打印出来
  5. * NetworkUtils<br>
  6. >>获取网络状态、网络类型、运营商等工具类
  7. * SpUtils<br>
  8. >>Sharepreference工具类

SpUtils.setXXX(String key, Object value);//设置数据
SpUtils.getXXX(String key);//获取数据
SpUtils.remove(String key);//删除某个数据
SpUtils.removeAll();//删除所有保存的数据

  1. * StatusBarUtils<br>
  2. >>状态栏设置工具类,如果当前Activity/Fragment需要做特殊的状态栏处理则调用

StatusBarUtil.setColor(context, ContextCompat.getColor(context,R.color.xxxx));
//如果设置的背景与状态栏字体颜色有冲突,例如状态栏背景颜色和字体颜色都是蓝色,
//则需要在setColor之前调用
//设置字体颜色为黑色
StatusBarUtil.setDarkMode(MainActivity.this);
//或者设置字体颜色为白色
StatusBarUtil.setLightMode(MainActivity.this);

  1. * ToastUtils<br>
  2. >>Toast工具类,已针对重复Toast做处理

ToastUtils.show(String msg);

  1. * ViewManagerUtils<br>
  2. >>ActivityFragment的管理工具类

//退出所有Activity
ViewManagerUtils.getInstance().finishAllActivity();
//退出应用程序
ViewManagerUtils.getInstance().exitApp(context);
```


3、所使用到的第三方框架


4、 作者