【发布时间】:2021-04-24 10:51:12
【问题描述】:
我正在尝试将令牌存储在 sharedPreferences 中。但我不能这样做,因为有一个错误。 !!附加到上下文中。但似乎因为上下文为空而发生错误。 有没有办法解决这个问题?下面附上我写的代码
import android.content.Context
import android.content.SharedPreferences
class SharedPreferencesManager {
private val sharedPreferences: SharedPreferences = TikiTakaApplication.context!!.getSharedPreferences(MY_APP_PREFERENCES, Context.MODE_PRIVATE)
var accessToken: String?
get() = sharedPreferences.getString(SAVE_TOKEN,null)
set(value)= sharedPreferences.edit().putString(SAVE_TOKEN,value).apply()
var refreshToken: String?
get() = sharedPreferences.getString(SAVE_REFRESH, null)
set(value) = sharedPreferences.edit().putString(SAVE_REFRESH,value).apply()
companion object {
private const val MY_APP_PREFERENCES = "TikiTaka-Android"
private const val SAVE_TOKEN = "accessToken"
private const val SAVE_REFRESH = "refreshToken"
private var instance: SharedPreferencesManager? = null
@Synchronized
fun getInstance(): SharedPreferencesManager {
if (instance == null) instance = SharedPreferencesManager()
return instance!!
}
}
}
日志猫
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.tikitaka_android, PID: 13265
java.lang.NullPointerException
at com.example.tikitaka_android.Util.SharedPreferencesManager.<init>(SharedPreferencesManager.kt:7)
at com.example.tikitaka_android.Util.SharedPreferencesManager$Companion.getInstance(SharedPreferencesManager.kt:26)
at com.example.tikitaka_android.Base.BaseRepository.<init>(BaseRepository.kt:9)
at com.example.tikitaka_android.Sign.Data.SignRepository.<init>(SignRepository.kt:7)
at com.example.tikitaka_android.Sign.ViewModel.SignUpViewModel.<init>(SignUpViewModel.kt:12)
at java.lang.Class.newInstance(Native Method)
at androidx.lifecycle.ViewModelProvider$NewInstanceFactory.create(ViewModelProvider.java:219)
at androidx.lifecycle.ViewModelProvider$AndroidViewModelFactory.create(ViewModelProvider.java:278)
at androidx.lifecycle.SavedStateViewModelFactory.create(SavedStateViewModelFactory.java:106)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:185)
at androidx.lifecycle.ViewModelProvider.get(ViewModelProvider.java:150)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:54)
at androidx.lifecycle.ViewModelLazy.getValue(ViewModelProvider.kt:41)
at com.example.tikitaka_android.Sign.Ui.Fragment.SignUpFragment.getViewModel(Unknown Source:2)
at com.example.tikitaka_android.Sign.Ui.Fragment.SignUpFragment.loginAfterCheck(SignUpFragment.kt:51)
at com.example.tikitaka_android.Sign.Ui.Fragment.SignUpFragment.access$loginAfterCheck(SignUpFragment.kt:17)
at com.example.tikitaka_android.Sign.Ui.Fragment.SignUpFragment$onActivityCreated$1.onClick(SignUpFragment.kt:32)
at android.view.View.performClick(View.java:6294)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
【问题讨论】:
-
确保上下文不为空。
!!不会神奇地赋值。另外,请发布错误的logcat。 -
我添加到正文中
标签: android kotlin nullpointerexception sharedpreferences