Возникли проблемы с инициализацией sharedPreferences в объекте - PullRequest
0 голосов
/ 09 апреля 2020

Я совершенно новичок в 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 голосов
/ 09 апреля 2020

Попробуйте изменить lateinit var loginSavedPreferences на:

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

и проверьте, какое значение вы получите в savedserveraddress с точкой останова. Если это все еще не работает, попробуйте изменить режим в getSharedPreferences на 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...