Home » Android » android – AsyncTask – after execution, how to update view?

android – AsyncTask – after execution, how to update view?

Posted by: admin May 14, 2020 Leave a comment


In the onCreate() event of an Activity, I have started an AsyncTask to retrieve Product data from a database. After this has been completed successfully, how can I update the display?


public void onCreate(Bundle savedInstanceState) {
    new GetProductDetails().execute();

class GetProductDetails extends AsyncTask<String, String, String> {

    protected String doInBackground(String... params) {

        // updating UI from Background Thread
        runOnUiThread(new Runnable() {
            public void run() {
                // Check for success tag
                int success;
                try {
                    // Building Parameters
                    List<NameValuePair> params = new ArrayList<NameValuePair>();
                    params.add(new BasicNameValuePair("id", vid));
        (.. retrieve and parse data and set new textview contents ..)

The textviews etc. don’t get updated however.

How to&Answers:

If you want to update the view from async after complete process in then
you can use

protected void onPostExecute(String result)

But if you want to update data while running background process then use.
For ex…

protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i++) {
             totalSize += Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));<------
         return totalSize;

     protected void onProgressUpdate(Integer... progress) {  <-------

for more detail see this link
Hope this will help you…!


I am guessing the question is more about how to get hold of the UI View if the asyncTask is in a separate file .

In that case you have to pass the context to the Async task and use that to get the view.

class MyAsyncTask extends AsyncTask<URL, Integer, Long> {

    Activity mActivity;

    public MyAsyncTask(Activity activity) {
       mActivity = ativity;

And then in your onPostExecute use

int id = mActivity.findViewById(...);

Remember you cannot update the View from “doInBackground” since its not the UI thread.


In your AsyncTask class, add a onPostExecute method. This method executes on the UI thread and can update any UI component.

class GetProductDetails extends AsyncTask<...> 
    private TextView textView;
    protected void onPostExecute(String result)

(The result parameter is the value returned from the doInBackground method of your class.)