簡體   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