BaseRequest.java 4.05 KB
package com.cnlive.strike.user.network.api;


import android.text.TextUtils;

import com.cnlive.core.libs.base.application.AppConfig;
import com.cnlive.core.network.BaseResult;
import com.cnlive.core.network.NetBuilder;
import com.cnlive.core.network.ServerException;

import java.util.ArrayList;
import java.util.List;

import io.reactivex.Observable;
import okhttp3.Interceptor;

/**
 * 基本请求
 *  ys
 */
public class BaseRequest {
    private String userSetUrl;
    private static BaseRequest request;
    private long connectTimeout;//连接超时
    private long readTimeout;//读取超时
    private long writeTimeout;//写入超时
    private List<Interceptor> interceptorList;//拦截器
    private String baseUrl = "http://gank.io/api/data/";
    private final String SP_CMS_URL_DEBUT = "http://cmstest.cnlive.com:8768/";
    private final String SP_CMS_URL = "http://cms.cnlive.com:8768/";
    //网++ 接口域名
    public final String SP_BASE_URL = "https://apiwjj.cnlive.com/";
    //网++ 测试环境 接口域名
    public final String SP_DEBUG_URL = "http://apiwjjtest.cnlive.com/";
    //OPEN API 接口域名
    private final String OPEN_URL = "https://api.cnlive.com/";

    /**
     * 构造函数初始化
     */
    public BaseRequest() {
        interceptorList = new ArrayList<>();
    }


    /**
     * 设置连接超时
     *
     * @param connectTimeout
     * @return
     */
    public BaseRequest setConnectTimeout(long connectTimeout) {
        init();
        connectTimeout = connectTimeout;
        return request;
    }

    /**
     * 设置读取超时
     *
     * @param readTimeout
     * @return
     */
    public BaseRequest setReadTimeout(long readTimeout) {
        init();
        readTimeout = readTimeout;
        return request;
    }

    /**
     * 设置写入超时
     *
     * @param writeTimeout
     * @return
     */
    public BaseRequest setWriteTimeout(long writeTimeout) {
        init();
        writeTimeout = writeTimeout;
        return request;
    }


    /**
     * 初始化接口地址
     */
    private String initBaseUrl(Class clazz) {
        if (AppConfig.isDebug()) {
            baseUrl = SP_DEBUG_URL;//还原初始地址
            if (clazz == ApiBaseServiceOpen.class) {
                return OPEN_URL;
            }
        }
        return baseUrl;
    }

    /**
     * 设置连接地址
     *
     * @param url
     * @return
     */
    public BaseRequest setUrl(String url) {
        init();
        userSetUrl = url;
        return request;
    }

    /**
     * 添加拦截器
     *
     * @param interceptor
     * @return
     */
    public BaseRequest addInterceptor(Interceptor interceptor) {
        if (null != interceptor) {
            interceptorList.add(interceptor);
        }
        return request;
    }

    /**
     * @return
     */
    public static synchronized BaseRequest init() {
        if (null == request) {
            request = new BaseRequest();
        }
        return request;
    }

    public <NetService> NetService service(Class<NetService> clz) {
        NetService service = null;
        NetBuilder builder = new NetBuilder(clz);
        if (connectTimeout > 0) {
            builder.setConnectTimeout(connectTimeout);
        }
        if (readTimeout > 0) {
            builder.setReadTimeout(readTimeout);
        }
        if (writeTimeout > 0) {
            builder.setWriteTimeout(writeTimeout);
        }
        if (null != interceptorList && interceptorList.size() > 0) {
            builder.addInterceptors(interceptorList);
        }
        //设置接口请求头地址
        if (!TextUtils.isEmpty(userSetUrl)) {
            builder.setBaseUrl(userSetUrl);
            userSetUrl = "";
        } else {
            builder.setBaseUrl(initBaseUrl(clz));
        }
        service = (NetService) builder.getService();
        builder = null;
        //重置属性
        resetData();
        return service;

    }

    private void resetData() {
        interceptorList.clear();

        connectTimeout = 0;
        readTimeout = 0;
        writeTimeout = 0;
    }




}