【问题标题】:NullPointerException is occuring and I really don't have any clue of what I am doing wrong. Please help me. And I'm also a newbie [duplicate]NullPointerException 正在发生,我真的不知道我做错了什么。请帮我。而且我也是新手[重复]
【发布时间】:2021-02-08 19:56:25
【问题描述】:

SessioManager.kt

class SessionManager(context : Context) {

    private var PRIVATE_MODE = 0
    val PREF_NAME = "LoginLogout"

    val KEY_IS_LOGGEDIN = "isLoggedIn"
    var pref = context.getSharedPreferences(PREF_NAME, PRIVATE_MODE)   //---------error
    var pref_editor: SharedPreferences.Editor = pref.edit()

    fun  setLogin(isLoggedIn: Boolean) {                            //use to login or logout
        pref_editor.putBoolean(KEY_IS_LOGGEDIN, isLoggedIn)
        pref_editor.apply()

        if(!isLoggedIn) {
            pref_editor.clear().apply()
        }
    }

    fun isLoggedIn() : Boolean {                                    
        return pref.getBoolean(KEY_IS_LOGGEDIN, false)
    }
}

HomeActivity.java

public class HomeActivity extends AppCompatActivity {

private SessionManager sessionManager = new SessionManager(HomeActivity.this);  //-------error
private SharedPreferences sharedPreferences = sessionManager.getPref();

原因:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.content.SharedPreferences android.content.Context.getSharedPreferences(java.lang.String, int)'

【问题讨论】:

标签: java android-studio kotlin nullpointerexception runtime-error


【解决方案1】:

Android 中的 Activity 与典型的类不同,因为您不会自己实例化它们。它们由操作系统实例化,然后操作系统在您访问它之前设置对象。

但是,当您在声明站点初始化 SessionManager 时,您实际上是在向构造函数添加代码,因此您可以在操作系统完成设置之前尽早访问该类。

在这种情况下,您在 this 准备好之前将其作为 Context 对象传递。

基本经验法则:如果构造函数需要Context 参数,请不要在属性/字段的声明位置调用它。在 Kotlin 中,您必须将属性设为 lateinit var 并将其实例化为 onCreate() 或将其设为 Lazy。我认为惰性更简洁,因为它可以让你使用只读的val

val sessionManager: SessionManager by lazy { SessionManager(this) }

在 Java 中,您必须使用 onCreate 方法:

private SessionManager sessionManager;

//...
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    sessionManager = new SessionManager(this);

}

【讨论】:

    猜你喜欢
    • 2021-01-05
    • 1970-01-01
    • 2021-03-15
    • 2014-02-16
    • 1970-01-01
    • 2023-04-02
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多