From 85b902882c0df79aed2dc33272983c41343e2fd9 Mon Sep 17 00:00:00 2001 From: tongtongstudio Date: Fri, 18 Jul 2025 19:47:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0NetInterfaceManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/BaseApplication.java | 3 + .../network/NetInterfaceManager.java | 114 ++++++++++++++++++ .../elderlyassistant/network/UrlAddress.java | 6 + 3 files changed, 123 insertions(+) create mode 100644 app/src/main/java/com/ttstd/elderlyassistant/network/NetInterfaceManager.java create mode 100644 app/src/main/java/com/ttstd/elderlyassistant/network/UrlAddress.java diff --git a/app/src/main/java/com/ttstd/elderlyassistant/base/BaseApplication.java b/app/src/main/java/com/ttstd/elderlyassistant/base/BaseApplication.java index 3e57cab..22770dd 100644 --- a/app/src/main/java/com/ttstd/elderlyassistant/base/BaseApplication.java +++ b/app/src/main/java/com/ttstd/elderlyassistant/base/BaseApplication.java @@ -5,16 +5,19 @@ import android.util.Log; import com.hjq.toast.Toaster; import com.tencent.mmkv.MMKV; +import com.ttstd.elderlyassistant.network.NetInterfaceManager; public class BaseApplication extends Application { private static final String TAG = "BaseApplication"; + @Override public void onCreate() { super.onCreate(); Toaster.init(this); String rootDir = MMKV.initialize(this); Log.e(TAG, "mmkv root: " + rootDir); + NetInterfaceManager.init(this); } @Override diff --git a/app/src/main/java/com/ttstd/elderlyassistant/network/NetInterfaceManager.java b/app/src/main/java/com/ttstd/elderlyassistant/network/NetInterfaceManager.java new file mode 100644 index 0000000..1dd3103 --- /dev/null +++ b/app/src/main/java/com/ttstd/elderlyassistant/network/NetInterfaceManager.java @@ -0,0 +1,114 @@ +package com.ttstd.elderlyassistant.network; + +import android.annotation.SuppressLint; +import android.content.Context; + +import java.io.File; +import java.util.concurrent.TimeUnit; + +import okhttp3.Cache; +import okhttp3.ConnectionPool; +import okhttp3.Dispatcher; +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; +import retrofit2.converter.gson.GsonConverterFactory; + +public class NetInterfaceManager { + private static final String TAG = "NetInterfaceManager"; + + @SuppressLint("StaticFieldLeak") + private static NetInterfaceManager INSTANCE; + private Context mContext; + + + private Retrofit mRetrofit; + private OkHttpClient mOkHttpClient; + + private Retrofit mScdnRetrofit; + private OkHttpClient mScdnClient; + + //超时时间 + private static final int TIME_OUT = 5; + // 缓存大小 + private static final long CACHE_SIZE = 1024 * 1024 * 64; + + private NetInterfaceManager(Context context) { + this.mContext = context; + + if (mOkHttpClient == null) { + //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.connectTimeout(TIME_OUT, TimeUnit.SECONDS); // 设置连接超时时间 + builder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置写入超时时间 + builder.readTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置读取数据超时时间 + builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 + + Dispatcher dispatcher = new Dispatcher(); + dispatcher.setMaxRequests(1);// 全局最大并发请求数设为1 + dispatcher.setMaxRequestsPerHost(1);// 同一主机的并发请求数也设为1(可选,但更严格) + builder.dispatcher(dispatcher); + builder.connectionPool(new ConnectionPool(20, 1, TimeUnit.SECONDS)); + // 设置缓存文件路径 + String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache"; + Cache cache = new Cache(new File(cacheDirectory), CACHE_SIZE); + builder.cache(cache);// 设置缓存 + mOkHttpClient = builder.build(); + + } + + if (mRetrofit == null) { + mRetrofit = new Retrofit.Builder() + .client(mOkHttpClient) + .baseUrl(UrlAddress.TTSTD) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .build(); + } + + if (mScdnClient == null) { + //如果无法生存缓存文件目录,检测权限使用已经加上,检测手机是否把文件读写权限禁止了 + OkHttpClient.Builder builder = new OkHttpClient.Builder(); + builder.connectTimeout(TIME_OUT, TimeUnit.SECONDS); // 设置连接超时时间 + builder.writeTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置写入超时时间 + builder.readTimeout(TIME_OUT, TimeUnit.SECONDS);// 设置读取数据超时时间 + builder.retryOnConnectionFailure(true);// 设置进行连接失败重试 + // 设置缓存文件路径 + String cacheDirectory = mContext.getExternalCacheDir().getAbsolutePath() + "/OkHttpCache"; + Cache cache = new Cache(new File(cacheDirectory), CACHE_SIZE); + builder.cache(cache);// 设置缓存 + mScdnClient = builder.build(); + } + if (mScdnRetrofit == null) { + mScdnRetrofit = new Retrofit.Builder() + .client(mScdnClient) + .baseUrl(UrlAddress.IMG_SCDN) + .addConverterFactory(GsonConverterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .build(); + } + + } + + public static void init(Context context) { + if (context == null) { + throw new RuntimeException("Context is NULL"); + } + if (INSTANCE == null) { + INSTANCE = new NetInterfaceManager(context); + } + } + + public static NetInterfaceManager getInstance() { + if (INSTANCE == null) { + throw new IllegalStateException("You must be init NetworkManager first"); + } + return INSTANCE; + } + + public OkHttpClient getOkHttpClient() { + return mOkHttpClient; + } + + +} diff --git a/app/src/main/java/com/ttstd/elderlyassistant/network/UrlAddress.java b/app/src/main/java/com/ttstd/elderlyassistant/network/UrlAddress.java new file mode 100644 index 0000000..053a2ac --- /dev/null +++ b/app/src/main/java/com/ttstd/elderlyassistant/network/UrlAddress.java @@ -0,0 +1,6 @@ +package com.ttstd.elderlyassistant.network; + +public class UrlAddress { + public static final String TTSTD = "https://www.ttstd.com:/65535"; + public static final String IMG_SCDN = "https://img.scdn.io/"; +}