Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Kotlin的WebServiceBuilder中动态设置ReadTimeout和connectionTimeout_Kotlin_Retrofit2 - Fatal编程技术网

如何在Kotlin的WebServiceBuilder中动态设置ReadTimeout和connectionTimeout

如何在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

如何在改装WebServiceBuilder中动态设置connectionTimeout和readTimeout

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)