繁体   English   中英

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

[英]How to pass context from MainActivity to another class in Android?

尝试将上下文从MainActivity类传递到另一个时遇到问题。 这是ContextPasser类。

public class ContextPasser extends Application{
public Context context;
public ContextPasser(){
    context = getApplicationContext();
}}

但是,如果我在另一个类中使用上下文变量,则如下所示:

Line line = new Line(new ContextPasser().context);

我收到一个空指针异常。 我想要一个不涉及传递上下文变量的解决方案,因为我已经查看了所有其他stackoverflows,它们似乎并没有帮助我。 我发现的解决方案之一是:

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类本身的参数的方法。

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

如果您的其他班级是非活动班级,这就是您传递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);

OBX的答案显示了一种方法。 但是您应该了解为什么您的方法行不通。

Android组件如实例ApplicationActivity都没有完全实现的Context ,直到他们已经被框架进行初始化秒。 这发生在调用onCreate(...)之前的某个时间。 如果您自己创建一个new实例,则该实例将不会初始化,也不会用作Context 出于相同的原因,在字段分配或构造函数中调用getApplicationContext()将返回null或引发异常。

MyActivity extends Activity {
  private Context appContext = getApplicationContext(); // wrong

  public MyActivity {
    appContext = getApplicationContext(); // wrong
  }

  public void onCreate(final Bundle savedInstanceState) {
    appContext = getApplicationContext(); // correct
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM