2015-07-20 4 views
0

Я вызываю класс Async из своего основного класса активности. Когда был выполнен POST, я хочу вернуть результат к основному действию.Передать контекст классу Async

public class MainActivity extends Activity implements OnClickListener, AsyncResponse{ 
    public Context context; 
    PostKey asyncTask = new PostKey(context); 

    public void onCreate(Bundle savedInstanceState) { 
     asyncTask.delegate = this; 
    } 

    public void onClick(View v) { 
     asyncTask.delegate = this; 
     new PostKey(context).execute(keyValue); 
    } 

    public void processFinish(String output){ 
     //this you will received result fired from async class of onPostExecute(result) method. 
     Log.d("Result", output); 
    } 
} 


public class PostKey extends AsyncTask<String, String, String> { 
    public AsyncResponse delegate = null; 
    public Context context; 

    public PostKey(Context context){ 
     this.context = context.getApplicationContext(); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     return postData(params[0]); 
    } 

    @Override 
    protected void onPostExecute(String result){ 
     this.context = context.getApplicationContext(); 
     delegate = (AsyncResponse) context; 
    } 

    delegate.processFinish(result); 
} 

public interface AsyncResponse { 
    void processFinish(String output); 
} 

Всякий раз, когда я пытаюсь запустить приложение, я сразу получаю фатальную ошибку, вызванную исключением nullpointer. NullPointer относится к следующему:

public PostKey(Context context){ 
    this.context = context.getApplicationContext(); 
} 

& PostKey asyncTask = new PostKey(context);

Во втором случае я могу получить, что context пуст, но я должен передать переменную здесь.

+0

В вашей основной деятельности, 'контексте общественного контекста,' объявлен, но никогда не присваивается значение? Это значение null .. поэтому попытка вызвать конструктор PostKey, который пытается вызвать функцию getApplicationContext() на нулевом объекте, определенно даст вам исключение NullPointerException. – Gosu

+0

Возможный дубликат [Что такое исключение Null Pointer Exception и как его исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do -i-fix-it) – Gosu

+0

@Gosu В каждом фрагменте кода я обнаружил, что переменная 'context' была установлена ​​в классе async. Из-за 'private PostKey (контекст контекста) {}' Мне нужно передать переменные в основной активности – Orynuh

ответ

0

Здравствуйте Oryna вы передавая нулевое значение контекста в качестве параметра просто заменить эти строки с этим

new PostKey(context).execute(keyValue); 

к

new PostKey(MainActivity.this).execute(keyValue); 

и конструктор для выполнения этой задачи асинхронной заменить код

public PostKey(Context context){ 
    this.context = context.getApplicationContext(); 
} 

с

public PostKey(Context context){ 
    this.context = context; 
} 
2

Activity уже есть Context, поэтому вы не должны ссылаться на него. Просто используйте this. С другой стороны, Activity должна пройти свой жизненный цикл, прежде чем вы сможете использовать контекст. Удалить

public Context context; 
PostKey asyncTask = new PostKey(context); 

и добавить

PostKey asyncTask = new PostKey(this); 

в вашем onCreate. И, пожалуйста, добавьте super.onCreate(savedInstanceState);, как первое, что в вашем onCreate

0

пытаются использовать this.context = getApplicationContext(); вместо

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