Retrofit+RxJava+OkHttp的高层封装

(一)封装
RetrofitManager 
public class RetrofitManager {

    //OkHttp-- 30秒内直接读缓存
    private static final long HAVA_NET_MAX = 30; //30秒  有网超时时间
    //OkHttp--设置链接与写入超时时间
    private static final int CONNECT_TIMEOUT = 10;

    //定义同步的OkHttpClient
    private static volatile OkHttpClient sOkHttpClient = null;
    //定义RetrofitManager
    private static RetrofitManager mInstance = null;
    //定义NetRequestFactory
    private final NetRequestService mNetRequestService;

    // 配置OkHttpClient
    private OkHttpClient getOkHttpClient() {
        if (sOkHttpClient == null) {
            synchronized (RetrofitManager.class) {
                if (sOkHttpClient == null) {
                    //创建OkHttpClient并配置
                    sOkHttpClient = new OkHttpClient.Builder()
                            .cache(initOkHttpCache()) //配置缓存
                            .addNetworkInterceptor(new NetCacheInterceptor(App.getContext())) //添加网络拦截器
                            .retryOnConnectionFailure(true)
                            .connectTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
                            .writeTimeout(CONNECT_TIMEOUT, TimeUnit.SECONDS)
                            .readTimeout(HAVA_NET_MAX, TimeUnit.SECONDS)
                            .build();
                }
            }
        }
        return sOkHttpClient;
    }

    //配置okhttp缓存
    private Cache initOkHttpCache() {
        int cacheSize = 1024 * 1024 * 30; //缓存大小30Mb
        //储存目录 指定缓存路径
        File directoryFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/okHttpCache");
        return new Cache(directoryFile, cacheSize);
    }

    //创建及配置Retrofit
    private RetrofitManager() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("url")
                .client(getOkHttpClient()) //设置自定义配置的OkHttpClient
                .addConverterFactory(GsonConverterFactory.create()) //添加json解析
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) //添加RxJava2的适配
                .build();
        mNetRequestService = retrofit.create(NetRequestService.class);
    }

     //获取retrofit
    public static RetrofitManager getRetrofit() {
        if (mInstance == null) {
            synchronized (RetrofitManager.class) {
                if (mInstance == null) {
                    mInstance = new RetrofitManager();
                }
            }
        }
        return mInstance;
    }

    /**
     * 1.登录
     */
    public Observable<UserInfoBean> login(String userName, String password) {
        return mNetRequestService.login(userName, password)
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io());
    }

    /**
     * 2.获取联系人
     */
    public Observable<ContactBean> contactGet(String userName, String token) {
        return mNetRequestService.getContactData(userName, token)
                .subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io());
    } //..... }
 
(二)网络操作的接口
public interface NetRequestService {

//    @GET("android.json")
//    Observable<ApkUpdateInfo> checkUpdateAPK();

    /**
     * 登录
     *
     * @param userName 用户名
     * @param password 密码
     * @return
     */
    @POST("ac/login")
    @FormUrlEncoded
    Observable<UserInfoBean> login(@Field("username") String userName, @Field("password") String password);

    /**
     * 获取联系人
     *
     * @param userName 用户名
     * @param token    XCSRFToken
     * @return
     */
    @GET("info/user_list?")
    Observable<ContactBean> getContactData(@Query("uname") String userName, @Header("X-CSRFToken") String token);}
(三)调用
RetrofitManager.getRetrofit()
        .login(getText(mEtUserName), getText(mEtPassword))
        .observeOn(AndroidSchedulers.mainThread())
        .doOnNext(userInfoBean -> {
             //......
        })
        .subscribe(new Observer<UserInfoBean>() {
            @Override
            public void onSubscribe(Disposable d) {
                mProgressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onNext(UserInfoBean value) {
                if (TextUtils.isEmpty(value.getXCSRFToken())) {
                    ToastUtils.showShortToast("用户名或密码验证错误");
                } else {
                    ToastUtils.showShortToast("登录成功");
                    SpUtils.putBoolean(IS_TOKEN_INVALID_KEY,true);
                    startActivity(new Intent(LoginActivity.this, MainActivity.class));
                    finish();
                }
            }

            @Override
            public void onError(Throwable e) {
                ToastUtils.showShortToast("请求失败");
            }

            @Override
            public void onComplete() {
                mProgressBar.setVisibility(View.INVISIBLE);
            }
        });

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值