2017-02-04 114 views
0

嘗試將上下文從MainActivity類傳遞到另一個時遇到問題。這是ContextPasser類。如何將MainActivity的上下文傳遞給Android中的另一個類?

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類自身的參數。

請讓我知道任何建議或答案。 我真的很感激它。 非常感謝您的時間和考慮!

+2

活動有自己的上下文,爲什麼你不使用Line line = new Line(this); – Aryan

+0

我的回答對你有幫助嗎? – OBX

回答

3

如果您的其他類是一種非活性類你這是怎麼傳遞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); 
0

OBX's answer顯示了一種方式做到這一點。但你應該明白爲什麼你的方法不起作用。

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 
    } 
} 
相關問題