![](/img/trans.png)
[英]Android studios how to pass a context from mainactivity to another class
[英]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组件如实例Application
和Activity
都没有完全实现的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.