package com.dayu.pipirrapp.net; import java.util.concurrent.TimeUnit; import okhttp3.OkHttpClient; import okhttp3.logging.HttpLoggingInterceptor; import retrofit2.Retrofit; import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory; import retrofit2.converter.gson.GsonConverterFactory; /** * Copyright (C), 2023, * Author: zuo * Description:通信模块主类 */ public class RetrofitClient { private static RetrofitClient mInstance; private final Retrofit retrofit; private static final int READ_TIME_OUT = 5; private static final int CONNECT_TIME_OUT = 5; private RetrofitClient() { HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor(); // 包含header、body数据 loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); // loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS); OkHttpClient.Builder builder = new OkHttpClient().newBuilder(); //设置连接和读取时间 builder.readTimeout(READ_TIME_OUT, TimeUnit.MINUTES); builder.connectTimeout(CONNECT_TIME_OUT, TimeUnit.MINUTES); builder.writeTimeout(CONNECT_TIME_OUT, TimeUnit.MINUTES); //添加统一的header builder.addInterceptor(new MyIntercepterApplication()); //添加日志拦截器 //添加数据请求统一处理拦截器 // if (BuildConfig.DEBUG) { builder.addInterceptor(loggingInterceptor); // } OkHttpClient client = builder.build(); // // 创建GsonBuilder并设置长整型序列化策略为字符串 // GsonBuilder gsonBuilder = new GsonBuilder(); // gsonBuilder.registerTypeAdapter(String.class, new LongTypeAdapter()); // gsonBuilder.registerTypeAdapter(long.class, new LongTypeAdapter()); // 如果是 long 类型的基本数据类型,也需要注册 // gsonBuilder.setLongSerializationPolicy(LongSerializationPolicy.STRING); //// 创建Gson实例 // Gson gson = gsonBuilder.create(); retrofit = new Retrofit.Builder() .baseUrl(Constants.BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .client(client).build(); } public static synchronized RetrofitClient getInstance() { if (mInstance == null) { mInstance = new RetrofitClient(); } return mInstance; } public ApiService getApiService() { return retrofit.create(ApiService.class); } }