如何在Kotlin的WebServiceBuilder中动态设置ReadTimeout和connectionTimeout
如何在改装WebServiceBuilder中动态设置connectionTimeout和readTimeout如何在Kotlin的WebServiceBuilder中动态设置ReadTimeout和connectionTimeout,kotlin,retrofit2,Kotlin,Retrofit2,如何在改装WebServiceBuilder中动态设置connectionTimeout和readTimeout object WebServiceBuilder { var readTimeout = 10 var connectTimeout = 10 private const val URL = "my.url.here" private val okHttp = OkHttpClient.Builder() .rea
object WebServiceBuilder {
var readTimeout = 10
var connectTimeout = 10
private const val URL = "my.url.here"
private val okHttp = OkHttpClient.Builder()
.readTimeout(readTimeout.toLong(), TimeUnit.SECONDS)
.connectTimeout(connectionTimeout.toLong().toLong(), TimeUnit.SECONDS)
private val builder = Retrofit.Builder().baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttp.build())
private val retrofit = builder.build()
fun <T> buildService(serviceType: Class<T>): T {
Log.i("RT", readTimeout.toString() + connectTimeout.toString() )
return retrofit.create(serviceType)
}
}
我尝试为它创建一个“SharedReference”,但是使用“SharedReference”需要一个上下文,我不能像这样插入到我的WebServiceBuilder.kt中
object WebServiceBuilder {
var context: Context? = null
var readTimeout = 10
var connectTimeout = 10
private const val URL = "my.url.here"
private val okHttp = OkHttpClient.Builder()
.readTimeout(SharedPrefForWebService.getInstance(context!!).readTimeout!!.toLong(), TimeUnit.SECONDS)
.connectTimeout(SharedPrefForWebService.getInstance(context!!).connectionTimeout!!.toLong(), TimeUnit.SECONDS)
private val builder = Retrofit.Builder().baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttp.build())
private val retrofit = builder.build()
fun <T> buildService(serviceType: Class<T>): T {
Log.i("RT", readTimeout.toString() + connectTimeout.toString() )
return retrofit.create(serviceType)
}
}
但这是我得到的错误
java.lang.ExceptionInInitializerError
at com.kotlin.ambulantlcs.ui.MainActivity.onCreate(MainActivity.kt:86)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
Caused by: kotlin.KotlinNullPointerException
at com.kotlin.ambulantlcs.services.WebServiceBuilder.<clinit>(WebServiceBuilder.kt:20)
at com.kotlin.ambulantlcs.ui.MainActivity.onCreate(MainActivity.kt:86)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
java.lang.ExceptionInInitializeError
位于com.kotlin.ambulantlcs.ui.MainActivity.onCreate(MainActivity.kt:86)
位于android.app.Activity.performCreate(Activity.java:7955)
位于android.app.Activity.performCreate(Activity.java:7944)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)上
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:237)
位于android.app.ActivityThread.main(ActivityThread.java:7857)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
原因:kotlin.KotlinNullPointerException
在com.kotlin.ambulantlcs.services.WebServiceBuilder.(WebServiceBuilder.kt:20)
位于com.kotlin.ambulantlcs.ui.MainActivity.onCreate(MainActivity.kt:86)
位于android.app.Activity.performCreate(Activity.java:7955)
位于android.app.Activity.performCreate(Activity.java:7944)
位于android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463)上
在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)上
在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)中
在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)中
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
位于android.os.Handler.dispatchMessage(Handler.java:107)
位于android.os.Looper.loop(Looper.java:237)
位于android.app.ActivityThread.main(ActivityThread.java:7857)
位于java.lang.reflect.Method.invoke(本机方法)
位于com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
可能是因为WebServiceBuilder类在创建WebServiceBuilder时上下文为空之前首先获得构建。有没有办法使用SharedReferences动态设置超时
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val appBarConfiguration = AppBarConfiguration
.Builder(R.id.homeFragment, R.id.loginFragment)
.build()
WebServiceBuilder.context = this
}
java.lang.ExceptionInInitializerError
at com.kotlin.ambulantlcs.ui.MainActivity.onCreate(MainActivity.kt:86)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)
Caused by: kotlin.KotlinNullPointerException
at com.kotlin.ambulantlcs.services.WebServiceBuilder.<clinit>(WebServiceBuilder.kt:20)
at com.kotlin.ambulantlcs.ui.MainActivity.onCreate(MainActivity.kt:86)
at android.app.Activity.performCreate(Activity.java:7955)
at android.app.Activity.performCreate(Activity.java:7944)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3463)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3635)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2175)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7857)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1068)