您的位置:首页 > 编程语言 > Java开发

RxJava和Retrofit结合使用 封装类

2018-02-05 11:32 295 查看
//添加依赖和权限

compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'compile 'com.squareup.okhttp3:okhttp:3.6.0'
compile 'com.squareup.okio:okio:1.11.0'

compile 'com.squareup.okhttp3:logging-interceptor:3.5.0'//日志拦截器


//工具类
public class RetrofitUtils {
private static RetrofitUtils retrofitUtils;//工具类对象
private static ApiFunction apiFunction;//请求网络接口
public static OkHttpClient okHttpClient;

//静态快,获取OkHttpClient对象
static {
getOkHttpClient();
}

//单例锁模式
public static RetrofitUtils getInstence(){
if(retrofitUtils==null){
synchronized (RetrofitUtils.class){
if (retrofitUtils==null){
retrofitUtils=new RetrofitUtils();
}
}
}
return retrofitUtils;
}
//单例模式获取okhttp
public static OkHttpClient getOkHttpClient(){
if(okHttpClient==null){
synchronized (OkHttpClient.class){
if(okHttpClient==null){
File fileDir = new File(Environment.getExternalStorageDirectory(), "cache");
long fileSize = 10 * 1024 * 1024;
okHttpClient=new OkHttpClient.Builder()
//打印拦截器日志
.addNetworkInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY))
.connectTimeout(15, TimeUnit.SECONDS)//设置连接超时时间
.readTimeout(15, TimeUnit.SECONDS)//设置读取超时时间
.writeTimeout(15, TimeUnit.SECONDS)//设置写入超时时间
//.cache(new Cache(fileDir,fileSize))//写入sd卡
.build();
}
}
}
return okHttpClient;
}
//私有的无参构造
private RetrofitUtils(){
Retrofit retrofit=new Retrofit.Builder()
.baseUrl(Constants.Base_url)
.addConverterFactory(GsonConverterFactory.create())//添加gson转换器
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())//添加rxjava转换器
.client(okHttpClient)//添加okhttp
.build();
apiFunction=retrofit.create(ApiFunction.class);
}

//获取
public  ApiFunction API(){
return apiFunction;
}
}


public interface ApiFunction {
@POST
@FormUrlEncoded
Observable<BaseUser<User>> postRetrofit(@Url String url, @FieldMap Map<String,String> map);
}

//调用

RetrofitUtils.getInstence()
.API()
.postRetrofit(Constants.login_url,map)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<BaseUser<User>>() {
@Override
public void onSubscribe(Disposable d) {

}
@Override
public void onNext(BaseUser<User> value) {
onListener.Success(value);
}
@Override
public void onError(Throwable e) {
onListener.Error(e.toString());
}

@Override
public void onComplete() {

}
});

//请求网络工具类

public class Constants {
public static String Base_url="https://www.zhaoapi.cn/";
public static String login_url="user/login";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: