依賴
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
/*
* 下面的爲自己添加
* */
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.squareup.okhttp3:okhttp:3.12.1'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'io.reactivex.rxjava2:rxjava:2.2.4'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.1'
implementation 'org.greenrobot:greendao:3.2.2'
// add library
implementation 'com.facebook.fresco:fresco:1.11.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.jcodecraeer:xrecyclerview:1.5.9'
implementation 'com.android.support:design:28.0.0'
// 普通banner
implementation 'com.youth.banner:banner:1.4.9'
// 魅族banner
implementation 'com.github.pinguo-zhouwei:MZBannerView:v2.0.0'
//GreenDao數據庫
implementation 'org.greenrobot:greendao-generator:3.2.2'
}
greendao {
schemaVersion 1 //版本
daoPackage 'demo.com.demo01.dao' // 一般爲app包名+生成文件的文件夾名
targetGenDir 'src/main/java' //生成文件路徑
}
1、封裝網絡工具類
public class NewWorkHttp {
private static NewWorkHttp netWork;
private static final String BSAE_URL = "http://172.17.8.100/small/";
// String BSAE_URL = "http://169.254.101.220:8080/";
private Retrofit retrofit;
private NewWorkHttp() {
init();
}
public static NewWorkHttp getNetWorks(){
if (netWork == null) {
netWork = new NewWorkHttp();
}
return netWork;
}
private void init() {
// 攔截器
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
// 設置攔截器
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
// 設置okhttp
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(httpLoggingInterceptor)
.connectTimeout(10,TimeUnit.MINUTES)
.readTimeout(10,TimeUnit.MINUTES)
.writeTimeout(10,TimeUnit.MINUTES)
.build();
// 初始化 Retrofit
retrofit = new Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BSAE_URL)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();
}
public <T> T create(final Class<T> service){
return retrofit.create(service);
}
}
2、Basepresenter
public abstract class BasePresenter {
private DataCall consumer;
private boolean runing;
public BasePresenter(DataCall consumer) {
this.consumer = consumer;
}
public void requestNet(Object... args) {
if (runing)
return;
runing = true;
observable(args)
.compose(ResponseTransformer.handleResult())///
.compose(new ObservableTransformer() {
@Override
public ObservableSource apply(Observable upstream) {
return upstream.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
})
// .subscribeOn(Schedulers.newThread())// 子線程
// .observeOn(AndroidSchedulers.mainThread())// 主線程
.subscribe(new Consumer<Result>() {
@Override
public void accept(Result o) throws Exception {
consumer.success(o);
runing = false;
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
consumer.fail(CustomException.handleException(throwable));
runing = false;
}
});
}
protected abstract Observable observable(Object... args);
public void unBind() {
this.consumer = null;
}
public boolean isRuning() {
return runing;
}
}
3、接口
@POST("user/v1/register")
@FormUrlEncoded
Observable<RegisterData> getRegister(@Field("phone") String phone, @Field("pwd") String pwd);
4、接口
public interface DataCall<T> {
void success(T data);
void fail (ApiException a);
}
5、presenter
public class RegisterPresenter extends BasePresenter {
public RegisterPresenter(DataCall consumer) {
super(consumer);
}
@Override
protected Observable observable(Object... args) {
IRequest iRegister = NewWorkHttp.getNetWorks().create(IRequest.class);
Observable<RegisterData> registerRegister = iRegister.getRegister((String) args[0], (String) args[1]);
return registerRegister;
}
// 僅個人使用 勿噴