Подтвердить что ты не робот

Android как работать с asynctasks progressdialog

Asynctask имеет 4 метода переопределения onPreExecute(), doInBackground(), onProgressUpdate(), onPostExecute() кроме onProgressUpdate все работают. Что я должен делать, чтобы работать onProgressUpdate(). Может кто-нибудь, пожалуйста, кратко объясните мне, что использовать onProgressUpdate(), что следует писать в этом?

4b9b3361

Ответ 1

onProgressUpdate() используется для управления ходом асинхронных операций с помощью этого метода. Обратите внимание на параметр с типом данных Integer. Это соответствует второму параметру в определении класса. Этот обратный вызов может быть вызван из тела метода doInBackground(), вызвав publishProgress().

Пример

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class AsyncTaskExample extends Activity {

    protected TextView _percentField;

    protected Button _cancelButton;

    protected InitTask _initTask;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        _percentField = (TextView) findViewById(R.id.percent_field);
        _cancelButton = (Button) findViewById(R.id.cancel_button);
        _cancelButton.setOnClickListener(new CancelButtonListener());
        _initTask = new InitTask();
        _initTask.execute(this);
    }

    protected class CancelButtonListener implements View.OnClickListener {

        public void onClick(View v) {
            _initTask.cancel(true);
        }
    }

    /**
     * sub-class of AsyncTask
     */
    protected class InitTask extends AsyncTask<Context, Integer, String> {

        // -- run intensive processes here
        // -- notice that the datatype of the first param in the class definition matches the param passed to this
        // method
        // -- and that the datatype of the last param in the class definition matches the return type of this method
        @Override
        protected String doInBackground(Context... params) {
            // -- on every iteration
            // -- runs a while loop that causes the thread to sleep for 50 milliseconds
            // -- publishes the progress - calls the onProgressUpdate handler defined below
            // -- and increments the counter variable i by one
            int i = 0;
            while (i <= 50) {
                try {
                    Thread.sleep(50);
                    publishProgress(i);
                    i++;
                }
                catch (Exception e) {
                    Log.i("makemachine", e.getMessage());
                }
            }
            return "COMPLETE!";
        }

        // -- gets called just before thread begins
        @Override
        protected void onPreExecute() {
            Log.i("makemachine", "onPreExecute()");
            super.onPreExecute();
        }

        // -- called from the publish progress
        // -- notice that the datatype of the second param gets passed to this method
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            Log.i("makemachine", "onProgressUpdate(): " + String.valueOf(values[0]));
            _percentField.setText((values[0] * 2) + "%");
            _percentField.setTextSize(values[0]);
        }

        // -- called if the cancel button is pressed
        @Override
        protected void onCancelled() {
            super.onCancelled();
            Log.i("makemachine", "onCancelled()");
            _percentField.setText("Cancelled!");
            _percentField.setTextColor(0xFFFF0000);
        }

        // -- called as soon as doInBackground method completes
        // -- notice that the third param gets passed to this method
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.i("makemachine", "onPostExecute(): " + result);
            _percentField.setText(result);
            _percentField.setTextColor(0xFF69adea);
            _cancelButton.setVisibility(View.INVISIBLE);
        }
    }
}

Ответ 2

4 шага

Когда выполняется асинхронная задача, задача выполняет 4 шага:

onPreExecute(),, вызывается в потоке пользовательского интерфейса перед выполнением задачи. Этот шаг обычно используется для настройки задачи, например, показывая индикатор выполнения в пользовательском интерфейсе.

doInBackground (Params...),, вызываемый в фоновом потоке сразу после того, как onPreExecute() завершает выполнение. Этот шаг используется для выполнения фоновых вычислений, которые могут занять много времени. Параметры асинхронной задачи передаются на этот шаг. Результат вычисления должен быть возвращен этим шагом и будет возвращен на последний шаг. Этот шаг также может использовать publishProgress (Progress...) для публикации одного или нескольких единиц прогресса. Эти значения публикуются в потоке пользовательского интерфейса на этапе onProgressUpdate (Progress...).

onProgressUpdate (Прогресс...),, вызванный в потоке пользовательского интерфейса после вызова publishProgress (Прогресс...). Время выполнения undefined. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации строки выполнения или отображения журналов в текстовом поле.

onPostExecute (результат),, вызываемый в потоке пользовательского интерфейса после завершения фоновых вычислений. Результат вычисления фона передается на этот шаг в качестве параметра.

Пример

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
 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));
         // Escape early if cancel() is called
         if (isCancelled()) break;
     }
     return totalSize;
 }

 protected void onProgressUpdate(Integer... progress) {
     setProgressPercent(progress[0]);
 }

 protected void onPostExecute(Long result) {
     showDialog("Downloaded " + result + " bytes");
 }
}

Общие типы AsyncTask Три типа, используемые асинхронной задачей, следующие:

Params, тип параметров, отправленных при выполнении задачи.

Прогресс, тип единиц прогресса, опубликованных во время фонового вычисления.

Результат, тип результата вычисления фона.

Ответ 3

Да, вы правы, есть четыре метода в AsyncTask

Когда выполняется асинхронная задача, задача выполняет 4 шага:

onPreExecute()

Вызывается в потоке пользовательского интерфейса сразу после выполнения задачи. Этот шаг обычно используется для настройки задачи, например, показывая индикатор выполнения в пользовательском интерфейсе.

doInBackground(Params...) 

Вызывается в фоновом потоке сразу после завершения onPreExecute(). Этот шаг используется для выполнения фоновых вычислений, которые могут занять много времени. Параметры асинхронной задачи передаются на этот шаг. Результат вычисления должен быть возвращен этим шагом и будет возвращен на последний шаг. Этот шаг также может использовать publishProgress(Progress...) для публикации одной или нескольких единиц прогресса. Эти значения публикуются в потоке пользовательского интерфейса на шаге onProgressUpdate(Progress...).

onProgressUpdate(Progress...)

Вызывается в потоке пользовательского интерфейса после вызова publishProgress(Progress...). Время выполнения undefined. Этот метод используется для отображения любой формы прогресса в пользовательском интерфейсе, пока фоновое вычисление все еще выполняется. Например, его можно использовать для анимации строки выполнения или отображения журналов в текстовом поле.

onPostExecute(Result)

Вызывается в потоке пользовательского интерфейса после завершения фонового вычисления. Результат вычисления фона передается на этот шаг в качестве параметра.

Для получения дополнительной информации нажмите здесь

Ответ 4

onProgressUpdate работает в потоке пользовательского интерфейса после publishProgress. Из документации AsyncTask - ваш код должен выглядеть примерно так.

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
    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) {
        setProgressPercent(progress[0]);
    }

    protected void onPostExecute(Long result) {
        showDialog("Downloaded " + result + " bytes");
    }
}

Ответ 5

hey this might help you??

индикатор выполнения автоматически исчезнет, ​​когда вы получите ответ

User_AsyncTaskk extends AsyncTask
 public class User_AsyncTask extends AsyncTask<String, String, String>
    {
        String response = "";

        @Override
        protected void onPreExecute()
        {
            try
            {
                if (progressDialog != null)
                    progressDialog.cancel();
            }
            catch (Exception e)
            {

            }
            progressDialog = ProgressDialog.show(DisplayDetails.this, "", "Please wait...", true, true);
            progressDialog.setCancelable(false);
            progressDialog.show();
        }


 protected String doInBackground(String... params)
        {

            try
            {


               //Complete ur Code

                Log.i("AUTO ", "response  is : " + response);
                return response;
            }

            catch (Exception e)
            {

            }
        }

 @Override
        protected void onPostExecute(String s)
        {
            if (progressDialog != null) {
                progressDialog.dismiss();
                progressDialog = null;
            }

            try {



            }
            catch (Exception e)
            {

            }
        }