我对Kotlin和Android Studio还是陌生的。
我有一个对象RetrofitClient,我正在尝试导入URL,用户名等的共享首选项 但是,我正在努力使其正常运行
import okhttp3.OkHttpClient
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
object RetrofitClient {
private val AUTH = "Basic " + Base64.encodeToString("A1122334".toByteArray(),Base64.NO_WRAP)
private const val BASE_URL = "http://192.168.2.5:3001/"
private val okHttpClient = OkHttpClient.Builder()
.addInterceptor { chain ->
val original = chain.request()
val requestBuilder = original.newBuilder()
.addHeader("Authorization", AUTH)
.method(original.method(),original.body())
val request = requestBuilder.build()
chain.proceed(request)
}.build()
val httpinstance: httpApi by lazy{
val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient)
.build()
retrofit.create(httpApi::class.java)
}
}
保存的偏好设置类别:
import android.content.Context
class LoginSavedPreferences(context: Context) {
private val sharedPreferences = context.getSharedPreferences("LoginPreferences",0)
// Save Boolean
fun saveBooleanPref(key: String, value: Boolean) {
sharedPreferences.edit().putBoolean(key,value).apply()
}
// get Boolean
fun getBooleanPref(key: String): Boolean {
return sharedPreferences.getBoolean(key,false)
}
// Save String
fun saveStringPref(key: String, value: String) {
sharedPreferences.edit().putString(key,value).apply()
}
// get String
fun getStringPref(key: String): String? {
return sharedPreferences.getString(key,null)
}
// Save Int
fun saveIntPref(key: String, value: Int) {
sharedPreferences.edit().putInt(key,value).apply()
}
// get Int
fun getIntPref(key: String): Int {
return sharedPreferences.getInt(key,0)
}
}
这是我的LoginActivity的一个片段,该片段可以正常工作,但是当我将这两行放到RetrofitClient中时,它将不会初始化
class LoginActivity : AppCompatActivity() {
private lateinit var loginSavedPreferences: LoginSavedPreferences /// THIS LINE
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
loginSavedPreferences = LoginSavedPreferences(applicationContext) /// AND THIS LINE
// put values in the text boxes if we have them
val savedserveraddress = loginSavedPreferences.getStringPref(LoginConstants.KEY_SERVERADDRESS)
val savedusername = loginSavedPreferences.getStringPref(LoginConstants.KEY_USERNAME)
val savedpassword = loginSavedPreferences.getStringPref(LoginConstants.KEY_PASSWORD)
答案 0 :(得分:0)
尝试将lateinit var loginSavedPreferences
更改为:
private val loginSavedPreferences: LoginSavedPreferences by lazy {
LoginSavedPreferences(this@LoginActivity)
}
,并检查您在savedserveraddress
中得到的带有断点的值。如果仍然无法正常运行,请尝试将getSharedPreferences
中的模式更改为1