我在尝试将上下文从MainActivity类传递给另一个时遇到问题。这是ContextPasser类。
public class ContextPasser extends Application{
public Context context;
public ContextPasser(){
context = getApplicationContext();
}}
但是如果我在其他类中使用上下文变量,就像这样:
Line line = new Line(new ContextPasser().context);
我收到空指针异常。我想得到一个不涉及传递上下文变量的解决方案,因为我已经查看了所有其他stackoverflow并且它们似乎没有帮助我。我找到的解决方案之一是:
Context context;
MyHelperClass(Context context){
this.context=context;
}
这对我没有帮助,因为我正在调用Line类,即
Line line = new Line(new ContextPasser().context);
在另一个名为GameRunner的类中如此:
public class GameRunner extends Activity {
Line line = new Line(new ContextPasser().context);
public void draw(Canvas canvas){
line.draw(canvas);
getWindow().getDecorView().setBackgroundColor(Color.BLACK);
}
public void update(){
line.update();
}
}
所以,我想创建一个方法来传递Context而不接受Context类本身的参数。
请告诉我任何建议或答案。 我真的很感激。 非常感谢您的时间和考虑!
答案 0 :(得分:6)
如果您的其他课程是非活动课程,那么您就可以通过Context
:
public class MyNonActivityClass{
// variable to hold context
private Context context;
//save the context received via constructor in a local variable
public MyNonActivityClass(Context context){
this.context=context;
}
}
这就是你传递背景的方式:
MyNonActivityClass mClass = new MyNonActivityClass(this);
答案 1 :(得分:2)
OBX's answer显示了一种方法。但你应该明白为什么你的方法不起作用。
std::vector
和Application
等Android组件的实例在被框架初始化之前尚未完全实现为Activity
。这发生在调用Context
之前的某个时间。如果您自己创建onCreate(...)
实例,则不会对其进行初始化,也不会将其用作new
。出于同样的原因,在字段赋值或构造函数中调用Context
将返回getApplicationContext()
或抛出异常。
null