Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么片段中的上下文为空?_Java_Android_Nullpointerexception_Android Context - Fatal编程技术网

Java 为什么片段中的上下文为空?

Java 为什么片段中的上下文为空?,java,android,nullpointerexception,android-context,Java,Android,Nullpointerexception,Android Context,我有一个关于片段中上下文用法的问题。我的问题是我总是得到一个NullpointerException。以下是我的工作: 创建一个扩展SherlockFragment的类。在该类中,我有另一个助手类的实例: public class Fragment extends SherlockFragment { private Helper helper = new Helper(this.getActivity()); // More code ... } public class

我有一个关于片段中上下文用法的问题。我的问题是我总是得到一个NullpointerException。以下是我的工作:

创建一个扩展SherlockFragment的类。在该类中,我有另一个助手类的实例:

public class Fragment extends SherlockFragment { 
    private Helper helper = new Helper(this.getActivity());

    // More code ...
}
public class Helper {
    public Helper(Context context) {
        this.context = context;
    }
    // More code ...
}
下面是另一个助手类的摘录:

public class Fragment extends SherlockFragment { 
    private Helper helper = new Helper(this.getActivity());

    // More code ...
}
public class Helper {
    public Helper(Context context) {
        this.context = context;
    }
    // More code ...
}

每次调用
context.someMethod
(例如context.getResources())时,我都会得到一个NullPointerException。为什么会这样?

什么时候实例化助手类?确保它位于片段生命周期中的onActivityCreated()之后

以下代码应该可以工作:

@Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    helper = new Helper(getActivity());
  }

片段
第一次实例化时,您正试图获取
上下文
。当时,它没有附加到
活动
,因此没有有效的
上下文

看一看这张照片。
onAttach()
onDetach()
之间的所有内容都包含对有效上下文实例的引用。此上下文实例通常通过
getActivity()

代码示例:

private Helper mHelper;

@Override
public void onAttach(Activity activity){
   super.onAttach (activity);
   mHelper = new Helper (activity);
}
在我的示例中,@LaurenceDawson使用了
onActivityCreated()
。注意区别。因为
onAttach()
已经获得了一个传递给它的
活动,所以我没有使用
getActivity()
。相反,我使用了通过的论点。对于生命周期中的所有其他方法,必须使用
getActivity()

getActivity()
如果在调用
onAttach()
之前调用它,则可以返回
null
。我想推荐如下:

public class Fragment extends SherlockFragment { 

    private Helper helper;

    // Other code

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        helper = new Helper(activity);
    }
} 

您好,问题已经回答了,但一般来说,如果您想在fragment或dialogFragment中获取上下文,请使用

protected lateinit var baseActivity: BaseActivity
protected lateinit var contextFragment: Context

override fun onAttach(context: Context) {
    super.onAttach(context)
    if (context is BaseActivity) {
        this.baseActivity = context
    }
    this.contextFragment = context
}
在爪哇

 protected BaseActivity baseActivity;
 protected Context context;

 @Override
 public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    this.context = context;
    if (context instanceof BaseActivity) {
        this.baseActivity = (BaseActivity) context;
    }
}

看起来
SherlockFragment#activity
在初始化片段时未设置,而是在稍后的阶段注入,因此在构造函数中为
null
。@user2426316我添加了一个示例。我的和LaurenceDawson的都能用。