2016-09-27 4 views
2

У меня странная проблема. Я пытаюсь изменить TextView, но не может findViewById, он говорит, что findViewById не может быть разрешен. У меня есть Основная деятельность, из которой я звоню AsyncTask(Context context). В конструкторе я передаю это из основного действия, я уже пробовал с Main Activity.getContext(), но он все еще не работает.Android asynctask не принимает контекст

Любая помощь приветствуется.

public class UcitavanjeUpozadini extends AsyncTask<Void, Void, Void> { 

private Context context; 
private ProgressDialog progressDialog; 
private UcitavanjeHelperKlasa helperKlasa; 
private List<OglasHelper> lista; 

public UcitavanjeUpozadini(Context context){ 
    this.context = context; 
    this.progressDialog = null; 
    this.helperKlasa = new UcitavanjeHelperKlasa(); 
    this.lista = new ArrayList<OglasHelper>(); 

} 
+0

Нужен какой-то код для AsyncTask, чтобы помочь – ganlaw

+0

Показать код, однако не рекомендуется передавать контекст Activity в AsyncTask .. это может легко привести к исключениям с нулевым указателем и утечкам памяти. –

+0

Я обновил вопрос с помощью кода – zomlaaa95

ответ

0

Вы должны сделать что-то вроде этого, если у вас есть активность, изменить значение TextView в onPostExecute:

private MyActivity extends AppCompatActivity { 

    private TextView mTextView; 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_activity); 
     mTextView = (TextView) findViewById(R.id.textview); 
     new MyAsyncTask().execute(); 
    } 

    private class MyAsyncTask extends AsyncTask<Void, Void, Boolean>{ 

     @Override 
     protected void onPreExecute(){ 
      mTextView.setText("text changed before background operation"); 
     } 

     @Override 
     protected Boolean doInBackground(Void... params){ 
      //perform your background operations changing the paramaters 
      //and return type accordingly 
      return true; 
     } 

     @Override 
     protected void onPostExecute(Boolean result){ 
      mTextView.setText("text changed after background operation"); 
     } 
    } 
} 

Если вам нужно поставить AsyncTask в отдельном файле, можно добавить функцию обратного вызова к интерфейсу реализована в вашей деятельности или передана TextView в AsyncTask во время создания объекта

+0

Спасибо, что будет работать – zomlaaa95

+0

@ zomlaaa95 Я рад, что помог вам :) – MatPag

0

Это фрагмент или деятельность? Вы пробовали getApplicationContext()?

+0

Наверное, не фрагмент ... «В конструкторе я передаю ЭТО из основной деятельности», - цитируется на вопрос. –

+0

он в обычном классе, и да, я пробовал, и он не работает – zomlaaa95

0

findViewById не является функцией контекста, его функцией является Activity. Как правило, вы должны передавать в представлении напрямую, а не в Activity, и называть findViewById.

+0

Как пропустить представление из основного вида деятельности? Дайте мне код, пожалуйста – zomlaaa95

+0

В качестве параметра в конструкторе –

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