Java 错误:在空对象引用上

Java 错误:在空对象引用上,java,android,Java,Android,我不知道我的代码出了什么问题 这是我的片段类 package com.example.gandi.symanlub; /** *一个简单的{@link Fragment}子类。 */ 公共类提醒扩展片段{ 按钮btnubah,btnkeluar; 会话管理器会话; 视图根视图; @凌驾 CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){ //为该碎片膨胀布局 rootview=充气机。充气(R.layout.fragment\u提醒,容器,错误); btnkeluar

我不知道我的代码出了什么问题

这是我的片段类

package com.example.gandi.symanlub;
/**
*一个简单的{@link Fragment}子类。
*/
公共类提醒扩展片段{
按钮btnubah,btnkeluar;
会话管理器会话;
视图根视图;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
//为该碎片膨胀布局
rootview=充气机。充气(R.layout.fragment\u提醒,容器,错误);
btnkeluar=(按钮)rootview.findviewbyd(R.id.btnlogout);
btnkeluar.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
session.logoutUser();
}
});
返回rootview;
}
}
这是我的SessionManager.java

package com.example.gandi.symanlub;
@SuppressLint(“提交引用”)
公共类会话管理器{
//共享首选项
共享参考优先;
//共享首选项编辑器
SharedReferences.Editor;
//上下文
语境(Context)语境;;
//共享优先模式
int PRIVATE_MODE=0;
//nama共享优先权
私有静态最终字符串PREF_NAME=“Sesi”;
//所有共享首选项密钥
私有静态最终字符串是\u LOGIN=“IsLoggedIn”;
公共静态最终字符串键\u EMAIL=“EMAIL”;
公共静态最终字符串键\u PASS=“PASS”;
//建造师
公共会话管理器(上下文){
这._context=context;
pref=\u context.getSharedReferences(pref\u名称,PRIVATE\u模式);
编辑器=pref.edit();
}
/**
*创建登录会话
* */
public void createLoginSession(字符串电子邮件、字符串传递){
//将登录值存储为TRUE
putBoolean(IS_LOGIN,true);
编辑器.putString(KEY_EMAIL,EMAIL);
编辑器.putString(KEY_PASS,PASS);
commit();
}
/**
*检查登录方法将检查用户登录状态
*如果为false,它将用户重定向到登录页面
*否则我什么也做不了
* */
公共void checkLogin(){
//检查登录状态
如果(!this.isLoggedIn()){
Intent i=新的Intent(_context,Login.class);
i、 添加标志(意图、标志、活动、清除、顶部);
i、 设置标志(意图、标志、活动、新任务);
_背景。起始触觉(i);
//((活动)_上下文).finish();
}
}
/**
*获取存储的会话数据
* */
公共HashMap getUserDetails(){
HashMap用户=新建HashMap();
user.put(KEY_EMAIL,pref.getString(KEY_EMAIL,null));
put(KEY_PASS,pref.getString(KEY_PASS,null));
返回用户;
}
/**
*清除会话详细信息
* */
public void logoutUser(){
编辑器.clear();
commit();
}
公共无效hapussesi(){
编辑器.clear();
commit();
}
公共布尔值isLoggedIn(){
返回pref.getBoolean(是\u登录,false);
}
}
运行项目时出错:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'void com.example.gandi.symanlub.SessionManager.logoutUser()'。

将其放入onCreate()中:

将其放入onCreate()中:


您收到一个错误,因为您正在拨打此线路:

session.logoutUser();
而会话为空,因为它未在任何地方初始化。在使用它之前,您需要添加一行来初始化它(您可以在
onCreateView
onAttach
或任何您认为合适的地方执行):


getActivity
用于将
上下文
传递给构造函数,因为我看到它接受了该参数。

您收到了一个错误,因为您在这一行调用:

session.logoutUser();
而会话为空,因为它未在任何地方初始化。在使用它之前,您需要添加一行来初始化它(您可以在
onCreateView
onAttach
或任何您认为合适的地方执行):


getActivity
用于将
上下文
传递给构造函数,因为我看到它接受该参数。

Hah,复制我的代码:D(几秒钟前getActivity部分不在那里)嗯,我不确定这些论点,所以我留了一段时间,但你提醒我,至少上下文应该是obivous谢谢^^你会认为一位绅士会因为认识到我们答案的正确性而相互给予好处:d特别是你,因为你复制了:]一位绅士确实会=)哈,复制我的代码:d(几秒钟前getActivity部分不在那里)我不确定这些论点,所以我把它留了下来,但你提醒我,至少上下文会是讣告谢谢^^^你会认为一位绅士会因为认识到我们答案的正确性而给对方加分:d尤其是你,因为你抄袭了:]一位绅士确实会=)我的错误。。谢谢,问题解决了!!我的错误。。谢谢,问题解决了!!
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    session = new SessionManager(getActivity());