无法初始化对象

时间:2020-04-09 12:01:40

标签: android android-studio kotlin

我对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)

1 个答案:

答案 0 :(得分:0)

尝试将lateinit var loginSavedPreferences更改为:

private val loginSavedPreferences: LoginSavedPreferences by lazy {
    LoginSavedPreferences(this@LoginActivity)
}

,并检查您在savedserveraddress中得到的带有断点的值。如果仍然无法正常运行,请尝试将getSharedPreferences中的模式更改为1

相关问题