Commit 647e9f0b1adca7a740a08e4bbe8209d3a922735d
1 parent
e6959934
add retrofit lib util
Showing
11 changed files
with
334 additions
and
6 deletions
app/build.gradle
| ... | ... | @@ -33,5 +33,6 @@ dependencies { |
| 33 | 33 | compile 'com.android.support.constraint:constraint-layout:1.0.2' |
| 34 | 34 | // TODO 本地酷使用说明 代码仓库标识 |
| 35 | 35 | // compile 'com.cnlive.libs:base:1.0.0@aar' |
| 36 | - compile 'com.cnlive:cnlive:0.1.0' | |
| 36 | + // compile 'com.cnlive:cnlive:0.1.0' | |
| 37 | + compile project(':cnlive') | |
| 37 | 38 | } | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/activity/MvpBindingActivity.java
| ... | ... | @@ -5,7 +5,7 @@ import android.databinding.ViewDataBinding; |
| 5 | 5 | import android.os.Bundle; |
| 6 | 6 | import android.support.annotation.NonNull; |
| 7 | 7 | |
| 8 | -import com.cnlive.libs.base.ReflectUtil; | |
| 8 | +import com.cnlive.libs.base.util.ReflectUtil; | |
| 9 | 9 | import com.hannesdorfmann.mosby.mvp.MvpActivity; |
| 10 | 10 | import com.hannesdorfmann.mosby.mvp.MvpPresenter; |
| 11 | 11 | import com.hannesdorfmann.mosby.mvp.MvpView; | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/fragment/MvpBindingFragment.java
| ... | ... | @@ -9,7 +9,7 @@ import android.view.LayoutInflater; |
| 9 | 9 | import android.view.View; |
| 10 | 10 | import android.view.ViewGroup; |
| 11 | 11 | |
| 12 | -import com.cnlive.libs.base.ReflectUtil; | |
| 12 | +import com.cnlive.libs.base.util.ReflectUtil; | |
| 13 | 13 | import com.hannesdorfmann.mosby.mvp.MvpFragment; |
| 14 | 14 | import com.hannesdorfmann.mosby.mvp.MvpPresenter; |
| 15 | 15 | import com.hannesdorfmann.mosby.mvp.MvpView; | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/model/IBaseInfo.java
0 → 100644
cnlive/src/main/java/com/cnlive/libs/base/network/ClientInterceptor.java
0 → 100644
| 1 | +package com.cnlive.libs.base.network; | |
| 2 | + | |
| 3 | + | |
| 4 | +import android.content.Context; | |
| 5 | + | |
| 6 | +import java.io.IOException; | |
| 7 | + | |
| 8 | +import okhttp3.Interceptor; | |
| 9 | +import okhttp3.Request; | |
| 10 | +import okhttp3.Response; | |
| 11 | + | |
| 12 | +class ClientInterceptor implements Interceptor { | |
| 13 | + | |
| 14 | + private Context mContext; | |
| 15 | + | |
| 16 | + ClientInterceptor(Context context) { | |
| 17 | + mContext = context; | |
| 18 | + } | |
| 19 | + | |
| 20 | + @Override | |
| 21 | + public Response intercept(Chain chain) throws IOException { | |
| 22 | + Request request = chain.request(); | |
| 23 | + | |
| 24 | + Response response = chain.proceed(request); | |
| 25 | + if (NetworkUtil.isConnectInternet(mContext)) { | |
| 26 | + int maxAge = 60 * 60; // read from cache for 1 minute | |
| 27 | + response.newBuilder() | |
| 28 | + .addHeader("Cache-Control", "public, max-age=" + maxAge) | |
| 29 | + .build(); | |
| 30 | + | |
| 31 | + } else { | |
| 32 | + int maxStale = 60 * 60 * 24 * 28; // tolerate 4-weeks stale | |
| 33 | + response.newBuilder() | |
| 34 | + .addHeader("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) | |
| 35 | + .build(); | |
| 36 | + } | |
| 37 | + | |
| 38 | + return response; | |
| 39 | + } | |
| 40 | +} | |
| 0 | 41 | \ No newline at end of file | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/network/NetworkUtil.java
0 → 100644
| 1 | +package com.cnlive.libs.base.network; | |
| 2 | + | |
| 3 | +import android.content.Context; | |
| 4 | +import android.net.ConnectivityManager; | |
| 5 | +import android.net.NetworkInfo; | |
| 6 | + | |
| 7 | +public class NetworkUtil { | |
| 8 | + | |
| 9 | + private static ConnectivityManager connectManager; | |
| 10 | + | |
| 11 | + private static void initConnectivityManager(Context context) { | |
| 12 | + if (connectManager == null) connectManager = (ConnectivityManager) | |
| 13 | + context.getSystemService(Context.CONNECTIVITY_SERVICE); | |
| 14 | + } | |
| 15 | + | |
| 16 | + public static boolean isConnectInternet(Context context) { | |
| 17 | + if (context == null) return false; | |
| 18 | + initConnectivityManager(context); | |
| 19 | + | |
| 20 | + if (connectManager != null) { | |
| 21 | + NetworkInfo networkinfo = connectManager.getActiveNetworkInfo(); | |
| 22 | + return networkinfo != null && networkinfo.isAvailable(); | |
| 23 | + } | |
| 24 | + return false; | |
| 25 | + } | |
| 26 | + | |
| 27 | +} | |
| 0 | 28 | \ No newline at end of file | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/network/RetrofitUtil.java
0 → 100644
| 1 | +package com.cnlive.libs.base.network; | |
| 2 | + | |
| 3 | + | |
| 4 | +import android.content.Context; | |
| 5 | + | |
| 6 | + | |
| 7 | +import com.cnlive.libs.base.util.LogUtil; | |
| 8 | + | |
| 9 | +import java.util.concurrent.TimeUnit; | |
| 10 | + | |
| 11 | +import javax.net.ssl.SSLContext; | |
| 12 | +import javax.net.ssl.SSLSocketFactory; | |
| 13 | + | |
| 14 | +import okhttp3.Cache; | |
| 15 | +import okhttp3.OkHttpClient; | |
| 16 | +import okhttp3.logging.HttpLoggingInterceptor; | |
| 17 | +import retrofit2.Retrofit; | |
| 18 | +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; | |
| 19 | +import retrofit2.converter.gson.GsonConverterFactory; | |
| 20 | + | |
| 21 | +public class RetrofitUtil { | |
| 22 | + private static boolean DEBUG = true; | |
| 23 | + | |
| 24 | + private static final String TAG = "RetrofitUtil"; | |
| 25 | + | |
| 26 | + public static void setBuildType(boolean debug) { | |
| 27 | + DEBUG = debug; | |
| 28 | + } | |
| 29 | + | |
| 30 | + public static <T> T getRestAPI(String endpoint, Class<T> service) { | |
| 31 | + | |
| 32 | + return getRestAPI(null, false, true, 5000, 5000, endpoint, service); | |
| 33 | + } | |
| 34 | + | |
| 35 | + public static <T> T getRestAPI(String endpoint, Class<T> service, boolean showLog) { | |
| 36 | + | |
| 37 | + return getRestAPI(null, false, showLog, 5000, 5000, endpoint, service); | |
| 38 | + } | |
| 39 | + | |
| 40 | + private static <T> T getRestAPI(Context context, boolean hasCache, boolean showLog, int readTimeout, int connectTimeout, String endpoint, Class<T> service) { | |
| 41 | + | |
| 42 | + OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient().newBuilder(); | |
| 43 | + | |
| 44 | + try { | |
| 45 | + SSLContext sslContext = SSLContext.getInstance("TLS"); | |
| 46 | + sslContext.init(null, null, null); | |
| 47 | + SSLSocketFactory socketFactory = new Tls12SocketFactory(sslContext.getSocketFactory()); | |
| 48 | + okHttpClientBuilder.sslSocketFactory(socketFactory); | |
| 49 | + } catch (Exception e) { | |
| 50 | + LogUtil.e(TAG, "RetrofitUtil", e); | |
| 51 | + } | |
| 52 | + | |
| 53 | + if (connectTimeout > 0) { | |
| 54 | + okHttpClientBuilder.connectTimeout(connectTimeout, TimeUnit.SECONDS); | |
| 55 | + } | |
| 56 | + if (readTimeout > 0) { | |
| 57 | + okHttpClientBuilder.readTimeout(readTimeout, TimeUnit.SECONDS); | |
| 58 | + } | |
| 59 | + if (hasCache) { | |
| 60 | + okHttpClientBuilder.cache(new Cache(context.getCacheDir(), 10 * 1024 * 1024)); | |
| 61 | + okHttpClientBuilder.addNetworkInterceptor(new ClientInterceptor(context)); | |
| 62 | + } | |
| 63 | + | |
| 64 | + if (showLog) { | |
| 65 | + HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); | |
| 66 | + httpLoggingInterceptor.setLevel(DEBUG ? HttpLoggingInterceptor.Level.BODY : HttpLoggingInterceptor.Level.NONE); | |
| 67 | + okHttpClientBuilder.addInterceptor(httpLoggingInterceptor); | |
| 68 | + } | |
| 69 | + | |
| 70 | + Retrofit retrofit = new Retrofit.Builder() | |
| 71 | + .baseUrl(endpoint) | |
| 72 | + .client(okHttpClientBuilder.build()) | |
| 73 | + .addConverterFactory(GsonConverterFactory.create()) | |
| 74 | + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) | |
| 75 | + .build(); | |
| 76 | + | |
| 77 | + return retrofit.create(service); | |
| 78 | + } | |
| 79 | + | |
| 80 | + | |
| 81 | +} | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/network/Subscriber.java
0 → 100644
| 1 | +package com.cnlive.libs.base.network; | |
| 2 | + | |
| 3 | +import android.content.Context; | |
| 4 | +import android.content.Intent; | |
| 5 | + | |
| 6 | + | |
| 7 | +import com.cnlive.libs.base.model.IBaseInfo; | |
| 8 | +import com.cnlive.libs.base.util.LogUtil; | |
| 9 | + | |
| 10 | +import io.reactivex.annotations.NonNull; | |
| 11 | +import io.reactivex.disposables.Disposable; | |
| 12 | +import io.reactivex.functions.Action; | |
| 13 | +import io.reactivex.functions.Consumer; | |
| 14 | +import retrofit2.Response; | |
| 15 | +import retrofit2.adapter.rxjava2.Result; | |
| 16 | + | |
| 17 | +//TODO | |
| 18 | +//load_success_code - 加载成功 | |
| 19 | +//load_failure_code - 加载失败 | |
| 20 | +//load_error_code - 加载错误 | |
| 21 | +//no_network_code - 没有网络 | |
| 22 | +// | |
| 23 | +//特殊处理类型 (全局) | |
| 24 | + | |
| 25 | +public abstract class Subscriber<T extends IBaseInfo> { | |
| 26 | + | |
| 27 | + private static String success_code = "200"; | |
| 28 | + private static final String unkonwn_error_code = "-1"; | |
| 29 | + private static final String network_error_code = "-2"; | |
| 30 | + private T mPageData; | |
| 31 | + private Context mContext; | |
| 32 | + | |
| 33 | + | |
| 34 | + public Subscriber(Context context) { | |
| 35 | + this.mContext = context; | |
| 36 | + } | |
| 37 | + | |
| 38 | + public Consumer<Result<T>> next = new Consumer<Result<T>>() { | |
| 39 | + @Override | |
| 40 | + public void accept(Result<T> data) throws Exception { | |
| 41 | + Response<T> response = data.response(); | |
| 42 | + if (response != null) mPageData = response.body(); | |
| 43 | + else if (!NetworkUtil.isConnectInternet(mContext)) onNetworkNoConnected(); | |
| 44 | + else onError(unkonwn_error_code, network_load_fail); | |
| 45 | + } | |
| 46 | + }; | |
| 47 | + | |
| 48 | + public Consumer<Throwable> error = new Consumer<Throwable>() { | |
| 49 | + @Override | |
| 50 | + public void accept(Throwable e) throws Exception { | |
| 51 | + LogUtil.d("NetLoader", "onError ", e); | |
| 52 | + if (mContext != null && !NetworkUtil.isConnectInternet(mContext)) | |
| 53 | + onNetworkNoConnected(); | |
| 54 | + else onError(unkonwn_error_code, e != null ? e.getMessage() : network_load_error); | |
| 55 | + } | |
| 56 | + }; | |
| 57 | + | |
| 58 | + public Action complete = new Action() { | |
| 59 | + @Override | |
| 60 | + public void run() throws Exception { | |
| 61 | + if (mPageData != null && success_code.equals(mPageData.getCode())) { | |
| 62 | + onCompleted(mPageData); | |
| 63 | + } else if (mPageData != null) { | |
| 64 | + //TODO 特定请求类型 | |
| 65 | + if (token_invalid.equals(mPageData.getCode())) { | |
| 66 | + onError(mPageData.getCode(), "用户信息已失效 ,请重新登录."); | |
| 67 | + onTokenInvalid(); | |
| 68 | + } else { | |
| 69 | + onError(mPageData.getCode(), mPageData.getMessage()); | |
| 70 | + } | |
| 71 | + } else { | |
| 72 | + if (mContext != null && !NetworkUtil.isConnectInternet(mContext)) | |
| 73 | + onNetworkNoConnected(); | |
| 74 | + else onError(unkonwn_error_code, network_load_fail); | |
| 75 | + } | |
| 76 | + } | |
| 77 | + }; | |
| 78 | + | |
| 79 | + public Consumer<Disposable> subscribe = new Consumer<Disposable>() { | |
| 80 | + @Override | |
| 81 | + public void accept(@NonNull Disposable disposable) throws Exception { | |
| 82 | + onStart(); | |
| 83 | + } | |
| 84 | + }; | |
| 85 | + | |
| 86 | + | |
| 87 | + public abstract void onCompleted(T data); | |
| 88 | + | |
| 89 | + public abstract void onError(String code, String message); | |
| 90 | + | |
| 91 | + public void onNetworkNoConnected() { | |
| 92 | + onError(network_error_code, network_no_connected); | |
| 93 | + } | |
| 94 | + | |
| 95 | + public void onStart() { | |
| 96 | + } | |
| 97 | + | |
| 98 | +} | |
| 0 | 99 | \ No newline at end of file | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/network/Tls12SocketFactory.java
0 → 100644
| 1 | +package com.cnlive.libs.base.network; | |
| 2 | + | |
| 3 | +import java.io.IOException; | |
| 4 | +import java.net.InetAddress; | |
| 5 | +import java.net.Socket; | |
| 6 | +import java.net.UnknownHostException; | |
| 7 | + | |
| 8 | +import javax.net.ssl.SSLSocket; | |
| 9 | +import javax.net.ssl.SSLSocketFactory; | |
| 10 | + | |
| 11 | +public class Tls12SocketFactory extends SSLSocketFactory { | |
| 12 | + private static final String[] TLS_SUPPORT_VERSION = {"TLSv1.1", "TLSv1.2"}; | |
| 13 | + | |
| 14 | + final SSLSocketFactory delegate; | |
| 15 | + | |
| 16 | + public Tls12SocketFactory(SSLSocketFactory base) { | |
| 17 | + this.delegate = base; | |
| 18 | + } | |
| 19 | + | |
| 20 | + @Override | |
| 21 | + public String[] getDefaultCipherSuites() { | |
| 22 | + return delegate.getDefaultCipherSuites(); | |
| 23 | + } | |
| 24 | + | |
| 25 | + @Override | |
| 26 | + public String[] getSupportedCipherSuites() { | |
| 27 | + return delegate.getSupportedCipherSuites(); | |
| 28 | + } | |
| 29 | + | |
| 30 | + @Override | |
| 31 | + public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException { | |
| 32 | + return patch(delegate.createSocket(s, host, port, autoClose)); | |
| 33 | + } | |
| 34 | + | |
| 35 | + @Override | |
| 36 | + public Socket createSocket(String host, int port) throws IOException, UnknownHostException { | |
| 37 | + return patch(delegate.createSocket(host, port)); | |
| 38 | + } | |
| 39 | + | |
| 40 | + @Override | |
| 41 | + public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException { | |
| 42 | + return patch(delegate.createSocket(host, port, localHost, localPort)); | |
| 43 | + } | |
| 44 | + | |
| 45 | + @Override | |
| 46 | + public Socket createSocket(InetAddress host, int port) throws IOException { | |
| 47 | + return patch(delegate.createSocket(host, port)); | |
| 48 | + } | |
| 49 | + | |
| 50 | + @Override | |
| 51 | + public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { | |
| 52 | + return patch(delegate.createSocket(address, port, localAddress, localPort)); | |
| 53 | + } | |
| 54 | + | |
| 55 | + private Socket patch(Socket s) { | |
| 56 | + if (s instanceof SSLSocket) { | |
| 57 | + ((SSLSocket) s).setEnabledProtocols(TLS_SUPPORT_VERSION); | |
| 58 | + } | |
| 59 | + return s; | |
| 60 | + } | |
| 61 | +} | |
| 0 | 62 | \ No newline at end of file | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/network/TransformUtil.java
0 → 100644
| 1 | +package com.cnlive.libs.base.network; | |
| 2 | + | |
| 3 | +import com.google.gson.Gson; | |
| 4 | + | |
| 5 | +public class TransformUtil { | |
| 6 | + | |
| 7 | + public static <T> T transform(Class<T> clazz, Object object) { | |
| 8 | + Gson gson = new Gson(); | |
| 9 | + String json = gson.toJson(object); | |
| 10 | + return gson.fromJson(json, clazz); | |
| 11 | + } | |
| 12 | +} | ... | ... |
cnlive/src/main/java/com/cnlive/libs/base/ReflectUtil.java renamed to cnlive/src/main/java/com/cnlive/libs/base/util/ReflectUtil.java