小公司,免费的Dns解析,有几率遇到域名解析异常(UnknownHostException),但通过IP访问又不方便(比如热备切换后,若IP变化,APP会直接连不上)。这里提供一种域名+IP的解析方法。
Okhttp其实已经提供了Dns解析方法
ApiDns
class ApiDns private constructor() : Dns {override fun lookup(hostname: String): List<InetAddress> {return try {//尝试系统默认解析Dns.SYSTEM.lookup(hostname)} catch (e: UnknownHostException) {//这里的hostname.contains,包含的是服务器域名if (hostname.contains("")) {"[DNS] $hostname 解析异常,尝试使用IP = $SERVER_IP".errorLog()InetAddress.getAllByName(SERVER_IP).asList()} else {throw e}}}companion object {// 这个值可以在网络正常时从服务器更新下来,SP、MMKV、SQL等保存在本地,随时更新private const val SERVER_IP = "47.xxx.xxx.88"val INSTANCE: ApiDns by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {ApiDns() }}}
然后在Okhttp里引用就行了
Retrofit.Builder().baseUrl(url).client(OkHttpClient.Builder().apply {// 主要是这行dns(ApiDns.INSTANCE)connectTimeout(20, TimeUnit.SECONDS)readTimeout(20, TimeUnit.SECONDS)writeTimeout(20, TimeUnit.SECONDS)addInterceptor(HttpLoggingInterceptor {message ->takeIf {AppUtils.isAppDebug() }?.let {workLog() }}.apply {level = HttpLoggingInterceptor.Level.BODY })retryOnConnectionFailure(true)}.build()).addConverterFactory(ScalarsConverterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build().create(ApiService::class.java)
原帖地址,转载请注明:/hx7013/article/details/111939812