2016-09-27 31 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

你應該做這樣的事情,如果你有一個活動,改變onPostExecute TextView的值:

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在一個單獨的文件,你可以回調添加到界面在你的Activity中實現或在實例化過程中將TextView傳遞給AsyncTask

+0

謝謝,這將工作 – zomlaaa95

+0

@ zomlaaa95我很高興我幫你:) – MatPag

0

這是在一個片段還是在一個活動?你有沒有嘗試getApplicationContext()?

+0

可能不是一個片段......「在構造函數中,我從主要活動傳遞了這個」 - 引用了問題。 –

+0

它是在一個普通的階級,是的,我已經嘗試過,它不起作用 – zomlaaa95

0

findViewById不是Context的函數,它是Activity的一個函數。一般來說,您應該直接傳遞視圖而不是一個Activity,並在其上調用findViewById。

+0

我將如何通過主要活動的觀點?請給我一些代碼請 – zomlaaa95

+0

作爲參數在構造函數 –