2017-02-04 18 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); 

Я получаю исключение нулевого указателя. Я хочу получить решение, которое не связано с передачей в переменной контекста, потому что я просмотрел все другие потоки 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(); 
} 

}

Итак, я хочу, чтобы создать метод, который будет проходить в контекст, не принимая параметры самого класса контекста.

Пожалуйста, дайте мне знать любые предложения или ответы. Я бы очень признателен. Большое спасибо за ваше время и внимание!

+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, такие как 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 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^