如何将MainActivity中的上下文传递到Android中的另一个类?

时间:2017-02-04 03:53:25

标签: java android class main-activity

我在尝试将上下文从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类本身的参数。

请告诉我任何建议或答案。 我真的很感激。 非常感谢您的时间和考虑!

2 个答案:

答案 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::vectorApplication等Android组件的实例在被框架初始化之前尚未完全实现为Activity。这发生在调用Context之前的某个时间。如果您自己创建onCreate(...)实例,则不会对其进行初始化,也不会将其用作new。出于同样的原因,在字段赋值或构造函数中调用Context将返回getApplicationContext()或抛出异常。

null