diff --git a/app/build.gradle b/app/build.gradle
index dc77cf8..d919594 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -53,7 +53,8 @@
 
 dependencies {
 //    implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61'
+    implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.61'
     implementation 'com.android.support:appcompat-v7:28.0.0'
     implementation 'com.android.support.constraint:constraint-layout:1.1.3'
     testImplementation 'junit:junit:4.12'
@@ -61,18 +62,18 @@
     androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
 
 //    compile 'com.alibaba:fastjson:1.1.70.android'
-    compile 'com.google.code.gson:gson:2.8.5'
-    compile 'com.nineoldandroids:parent:2.4.0'
-    compile 'com.squareup.okhttp3:okhttp:3.10.0'
-    compile 'net.java.dev.jna:jna:4.5.0@aar'
-    compile 'com.koushikdutta.async:androidasync:2.2.1'
-    compile group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
-    compile 'org.apache.commons:commons-lang3:3.7'
-    compile 'com.android.support:multidex:1.0.3'
-    compile 'org.jetbrains.kotlin:kotlin-reflect:1.3.41'
-    compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
-    compile 'org.apache.httpcomponents:httpcore:4.4.10'
-    compile("com.beust:klaxon:0.30") {
+    implementation 'com.google.code.gson:gson:2.8.6'
+    implementation 'com.nineoldandroids:parent:2.4.0'
+    implementation 'com.squareup.okhttp3:okhttp:4.2.2'
+    implementation 'net.java.dev.jna:jna:5.5.0@aar'
+    implementation 'com.koushikdutta.async:androidasync:2.2.1'
+    implementation group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
+    implementation 'org.apache.commons:commons-lang3:3.9'
+    implementation 'com.android.support:multidex:1.0.3'
+    implementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.61'
+    implementation 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
+    implementation 'org.apache.httpcomponents:httpcore:4.4.13'
+    implementation("com.beust:klaxon:0.30") {
         exclude group: 'org.jetbrains'
     }
     compile files('libs/zxinglibsl.jar')
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
index 8765a41..008eeaf 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -2,14 +2,15 @@
 
 import android.text.TextUtils
 import okhttp3.*
+import okhttp3.MediaType.Companion.toMediaTypeOrNull
 import java.io.IOException
 import java.io.UnsupportedEncodingException
-import java.security.SecureRandom
+import java.security.*
 import java.security.cert.CertificateException
 import java.security.cert.X509Certificate
+import java.util.*
 import java.util.concurrent.TimeUnit
 import javax.net.ssl.*
-import com.supwisdom.okhttp.ICallBackok as ICallBack1
 
 /**
  ** create by zzq on 2019/7/24
@@ -33,13 +34,39 @@
 
     private var client: OkHttpClient? = null
     private var clientLong: OkHttpClient
-    private val JSON = MediaType.parse("application/json; charset=utf-8")
-    private val FORM_ENCODE = MediaType.parse("application/x-www-form-urlencoded;charset=utf-8")
+    private val JSON = "application/json; charset=utf-8".toMediaTypeOrNull()
+    private val FORM_ENCODE = "application/x-www-form-urlencoded;charset=utf-8".toMediaTypeOrNull()
     private var commTime = 5
     private var clientId: String? = null
     private var jwt: String? = null
+    private var sslSocketFactory: SSLSocketFactory? = null
+    private var trustManager: X509TrustManager? = null
 
     init {
+        try {
+            val trustManagerFactory =
+                TrustManagerFactory.getInstance(
+                    TrustManagerFactory.getDefaultAlgorithm()
+                )
+            trustManagerFactory.init(null as KeyStore?)
+            val trustManagers =
+                trustManagerFactory.trustManagers
+            check(!(trustManagers.size != 1 || trustManagers[0] !is X509TrustManager)) {
+                ("Unexpected default trust managers:"
+                        + Arrays.toString(trustManagers))
+            }
+            trustManager = trustManagers[0] as X509TrustManager
+            val sslContext = SSLContext.getInstance("TLS")
+            sslContext.init(null, arrayOf<TrustManager?>(trustManager), null)
+            sslSocketFactory = sslContext.socketFactory
+        } catch (e: NoSuchAlgorithmException) {
+            e.printStackTrace()
+        } catch (e: KeyManagementException) {
+            e.printStackTrace()
+        } catch (e: KeyStoreException) {
+            e.printStackTrace()
+        }
+
         client = OkHttpClient()
             .newBuilder()
             .retryOnConnectionFailure(false)
@@ -47,7 +74,7 @@
             .writeTimeout(1, TimeUnit.SECONDS)
             .connectTimeout(commTime.toLong(), TimeUnit.SECONDS)
             .hostnameVerifier(TrustAllHostnameVerifier())
-            .sslSocketFactory(createSSLSocketFactory()!!)
+            .sslSocketFactory(sslSocketFactory!!, trustManager!!)
             .build()
         clientLong = OkHttpClient()
             .newBuilder()
@@ -56,7 +83,7 @@
             .writeTimeout(1, TimeUnit.SECONDS)
             .connectTimeout(3, TimeUnit.SECONDS)
             .hostnameVerifier(TrustAllHostnameVerifier())
-            .sslSocketFactory(createSSLSocketFactory())
+            .sslSocketFactory(sslSocketFactory!!, trustManager!!)
             .build()
 
     }
@@ -71,7 +98,7 @@
                 .writeTimeout(1, TimeUnit.SECONDS)
                 .connectTimeout(commTime.toLong(), TimeUnit.SECONDS)
                 .hostnameVerifier(TrustAllHostnameVerifier())
-                .sslSocketFactory(createSSLSocketFactory())
+                .sslSocketFactory(sslSocketFactory!!, trustManager!!)
                 .build()
         }
     }
@@ -88,46 +115,20 @@
         }
     }
 
-    private class TrustAllCerts : X509TrustManager {
-        @Throws(CertificateException::class)
-        override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
-        }
-
-        @Throws(CertificateException::class)
-        override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
-        }
-
-        override fun getAcceptedIssuers(): Array<X509Certificate> {
-            return arrayOf<X509Certificate>()
-        }
-    }
-
     private class TrustAllHostnameVerifier : HostnameVerifier {
         override fun verify(hostname: String, session: SSLSession): Boolean {
             return true
         }
     }
 
-    private fun createSSLSocketFactory(): SSLSocketFactory? {
-        var ssfFactory: SSLSocketFactory? = null
-        try {
-            val sc = SSLContext.getInstance("TLS")
-            sc.init(null, arrayOf<TrustManager>(TrustAllCerts()), SecureRandom())
-            ssfFactory = sc.socketFactory
-        } catch (e: Exception) {
-        }
-
-        return ssfFactory
-    }
-
     private fun addExtentHeader(request: Request.Builder): Request.Builder {
         request.addHeader("Accept", "application/json; q=0.5")
             .addHeader("Connection", "close")
         if (!TextUtils.isEmpty(clientId)) {
-            request.addHeader("X-TENANT-ID", clientId)
+            request.addHeader("X-TENANT-ID", clientId!!)
         }
         if (!TextUtils.isEmpty(jwt)) {
-            request.addHeader("Authorization", jwt)
+            request.addHeader("Authorization", jwt!!)
         }
         return request
     }
@@ -148,8 +149,8 @@
 
             override fun onResponse(call: Call, response: Response) {
                 try {
-                    val content = response.body()!!.string()
-                    val resp = TransResp(response.code(), response.message())
+                    val content = response.body!!.string()
+                    val resp = TransResp(response.code, response.message)
                     if (response.isSuccessful) {
                         resp.retjson = content
                     }
@@ -205,8 +206,8 @@
 
             override fun onResponse(call: Call, response: Response) {
                 try {
-                    val content = response.body()!!.string()
-                    val resp = TransResp(response.code(), response.message())
+                    val content = response.body!!.string()
+                    val resp = TransResp(response.code, response.message)
                     if (response.isSuccessful) {
                         resp.retjson = content
                     }
@@ -223,8 +224,8 @@
         return try {
             val response = clientLong.newCall(request).execute()
             /*响应主体只能被消耗一次*/
-            val content = response.body()!!.string()
-            val resp = TransResp(response.code(), response.message())
+            val content = response.body!!.string()
+            val resp = TransResp(response.code, response.message)
             if (response.isSuccessful) {
                 resp.retjson = content
             }
@@ -240,8 +241,8 @@
         return try {
             val response = client!!.newCall(request).execute()
             /*响应主体只能被消耗一次*/
-            val content = response.body()!!.string()
-            val resp = TransResp(response.code(), response.message())
+            val content = response.body!!.string()
+            val resp = TransResp(response.code, response.message)
             if (response.isSuccessful) {
                 resp.retjson = content
             }
