2017-05-21 28 views
0

我正在使用asynctask來做一些xml的東西,我想在完成時更新textview,但我遇到以下問題,因此無法使用findViewById引用textview。在Asynctask中引用Textview

public class HTTPRequestTask extends AsyncTask<String , Void, String > { 

    @Override 
protected String doInBackground(String... args) { 

    q = (TextView)findViewById(R.id.xmlData); //cannot resolve findViewbyId 

然後我想更新後執行方法中的textview。

@Override 
protected void onPostExecute(String s) { 
    super.onPostExecute(s);{ 
     q.setText(s); 
    } 
} 

什麼是最直接的方式能夠設置postExecute方法中的文本?

+0

你的代碼會導致**內存泄漏**在這種情況下,使用'WeakReference'。 – Enzokie

回答

0

你必須通過其中Activity變量或TextView可變進HTTPRequestTask

我的意思是,創建構造函數,

public class HTTPRequestTask extends AsyncTask<String , Void, String > { 

    private Activity act; 
private TextView q; 
     public HTTPRequestTask (Activity act) { 
     this.act = act; 
q = (TextView)act.findViewById(R.id.xmlData); 
     } 
     @Override 
     protected String doInBackground(String... args) { 
     //some code with your q 

要啓動任務中使用此:

new HTTPRequestTask(this).execute();

+1

使用'WeakReference',這是潛在的內存泄漏。 – Enzokie

+0

@Enzokie,我從來沒有面對這個問題使用這種實現。 – Vyacheslav

+0

當只能接受3個參數時,如何將這些特定變量傳遞給類? – MXG123

0

您應該參考嵌入類HTTPRequestTaskActivity class

如:MyActivity.this.findViewById(R.id.xmlData);

+0

看來,這個類在其他的java文件中。 – Vyacheslav

+0

你如何確認? –

+0

如果此類是子類,IDE有助於解決此問題。 – Vyacheslav

相關問題