2013-04-26 109 views
0

我有一個主類A,從中我創建一個對象到類B擴展Asynctask。在B的doInBackground設置內容視圖A.現在,我要更新的TextView的,但它給在doINBackground中設置textview android

Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

例外。我試圖在B中聲明setcontentview,但沒有用,請問誰能告訴如何編輯A中的Textview?

+0

嘗試在AsyncTask的onPostExecute函數中執行此操作。 – Triode 2013-04-26 06:46:48

回答

2

你需要調用setText()從UI線程,所以無論是從onPreExecute()onPostExecute()onProgressUpdate()

你也可以在doInBackground()使用runOnUiThread()處理程序,但那種失敗的使用的AsyncTask的目的。

+0

但是,我更新這個textview作爲進度條更新時,所以只需要在後臺做! – bharath 2013-04-26 07:53:05

+1

@bharath然後使用'publishProgress()'將信息傳遞給'onProgressUpdate()'並從那裏上傳它。 – 2013-04-26 07:54:29

+0

但我不能通過發佈通過數字,它需要無效na? – bharath 2013-04-26 08:09:22

0

我們不應該在doinBackgroud中執行任何UI更改。你應該並且可以在後期執行中執行。也可以在preexecute或onProgressUpdate中設置通知。

希望這會幫助你。

0

doInBackground是工作線程。你已經在UI線程中處理了View。請在onPreExecute()onPostExecute()onProgressUpdate。所有這些都在UI線程中工作。

當然你可以將Integer傳遞給onProgressUpdate。請注意第二paramters:AysncTask<Void, Integer, VOid>,第二個參數是指onProgressUpdate參數類型

+0

謝謝,但在進度更新,它只接受空白,我需要傳遞一個整數值,這是可能的嗎? – bharath 2013-04-26 08:07:00

2

如果文本更新與進步的信息做,那麼你可以使用該publishProgress()/onProgressUpdate()

如果它不是更廣泛的進展更新,那麼我與拉格哈夫 - 你應該考慮另一種方法。

4

重寫onProgressUpdate並在doInBackground中調用publishProgress

相關問題