如何在 classes 变量之间传输变量而不在 first class 中创建对象 second class?
How to transfer variables between classes variables without creating a object second class inside first class?
我有两个类。首先是 MainActivity.kt,我有一些字符串。第二个是这样的ServiceBuilder.kt
object ServiceBuilder {
private const val URL = "https://someLink.com" // <------------- In here I should transfer the string in my MainActivity.kt class
// Create Logger
private val logger = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
// Create a Custom Interceptor to apply Headers application wide
val headerInterceptor = object: Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
request = request.newBuilder()
.addHeader("x-device-type", Build.DEVICE)
.addHeader("Accept-Language", Locale.getDefault().language)
.build()
val response = chain.proceed(request)
return response
}
}
// Create OkHttp Client
private val okHttp = OkHttpClient.Builder()
.callTimeout(5, TimeUnit.SECONDS)
.addInterceptor(headerInterceptor)
.addInterceptor(logger)
// Create Retrofit Builder
private val builder = Retrofit.Builder().baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttp.build())
// Create Retrofit Instance
private val retrofit = builder.build()
fun <T> buildService(serviceType: Class<T>): T {
return retrofit.create(serviceType)
}
}
我需要正确地将字符串从 MainActivity 传输到此对象。我认为在 ServiceBuilder 中创建 MainActivity 对象不是个好主意,因为它分配了多余的内存。使用数据库或 SharedPreferences 也不是好主意,因为这种调用会减慢工作程序的速度,而创建这种技术是为了解决其他问题。
请告诉我解决这个问题的正确方法
P.S。我现在这个问题很简单,但是我现在不知道如何设计应用程序架构
是的,你是对的。将 MainActivity
对象放在 ServiceBuilder
中不是一个好主意。
相反,您可以添加这样的私有字段和函数以将其初始化为 ServiceBuilder
作为服务构建的一个步骤。然后你就可以在buildService
函数
中使用它了
private var stringField: String? = null
fun fieldString(stringField: String): ServiceBuilder {
this.stringField = stringField
return this
}
然后从您的 activity 中使用它作为
ServiceBuilder
.fieldString("string to set")
.buildService(...)
此外,您可以在此处查看有关 Kotlin 构建器模式的不同时刻
如果你使用 class 而不是对象,你可以尝试在你想要初始化它的时候在构造函数中传递这个值
我有两个类。首先是 MainActivity.kt,我有一些字符串。第二个是这样的ServiceBuilder.kt
object ServiceBuilder {
private const val URL = "https://someLink.com" // <------------- In here I should transfer the string in my MainActivity.kt class
// Create Logger
private val logger = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY)
// Create a Custom Interceptor to apply Headers application wide
val headerInterceptor = object: Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
var request = chain.request()
request = request.newBuilder()
.addHeader("x-device-type", Build.DEVICE)
.addHeader("Accept-Language", Locale.getDefault().language)
.build()
val response = chain.proceed(request)
return response
}
}
// Create OkHttp Client
private val okHttp = OkHttpClient.Builder()
.callTimeout(5, TimeUnit.SECONDS)
.addInterceptor(headerInterceptor)
.addInterceptor(logger)
// Create Retrofit Builder
private val builder = Retrofit.Builder().baseUrl(URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttp.build())
// Create Retrofit Instance
private val retrofit = builder.build()
fun <T> buildService(serviceType: Class<T>): T {
return retrofit.create(serviceType)
}
}
我需要正确地将字符串从 MainActivity 传输到此对象。我认为在 ServiceBuilder 中创建 MainActivity 对象不是个好主意,因为它分配了多余的内存。使用数据库或 SharedPreferences 也不是好主意,因为这种调用会减慢工作程序的速度,而创建这种技术是为了解决其他问题。
请告诉我解决这个问题的正确方法 P.S。我现在这个问题很简单,但是我现在不知道如何设计应用程序架构
是的,你是对的。将 MainActivity
对象放在 ServiceBuilder
中不是一个好主意。
相反,您可以添加这样的私有字段和函数以将其初始化为 ServiceBuilder
作为服务构建的一个步骤。然后你就可以在buildService
函数
private var stringField: String? = null
fun fieldString(stringField: String): ServiceBuilder {
this.stringField = stringField
return this
}
然后从您的 activity 中使用它作为
ServiceBuilder
.fieldString("string to set")
.buildService(...)
此外,您可以在此处查看有关 Kotlin 构建器模式的不同时刻
如果你使用 class 而不是对象,你可以尝试在你想要初始化它的时候在构造函数中传递这个值