增加NetInterfaceManager

This commit is contained in:
2025-07-18 19:47:36 +08:00
parent f242a915bc
commit 85b902882c
3 changed files with 123 additions and 0 deletions

View File

@@ -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

View File

@@ -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;
}
}

View File

@@ -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/";
}