Android - медленный ProgressDialog с веб-сервисом AsyncTask - PullRequest
1 голос
/ 18 октября 2011

У меня проблема. У меня есть asynctask, в котором я подключаюсь к веб-сервису, доставляю данные и помещаю их в базу данных. Это нормально, это работает. Но у меня есть проблема, я хочу поставить индикатор выполнения после нажатия кнопки ОБНОВИТЬ (то есть, когда я делаю веб-службу) ..

Когда я обновляюсь, это занимает 2 секунды, пока мой экран завис, и после этого немного запускается индикатор выполнения, а затем исчезает, но такты выполняются до запуска индикатора выполнения.

Вот код асинктаски

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> {
         private static final String DEBUG_TAG = "actualizo";
         private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this);

         @Override
         protected void onCancelled() {
             Log.i(DEBUG_TAG, "onCancelled");

                 pd.dismiss();

         }

         @Override
         protected void onPostExecute(Boolean result) {
             Log.i(DEBUG_TAG, "onPostExecute");

                 pd.dismiss();

         }

         @Override
         protected void onPreExecute() {

             pd.setMessage("Actualizando...");
             pd.show();


         }

         @Override
         protected void onProgressUpdate(Void... values) {



         }
         @Override
         protected Boolean doInBackground(Void... params) {


            webService();

             tv2 = resultado.toString();            //Obtengo el string resultado del WebService en tv2

             //Obtengo la hora actual

             insertoEnBD(); 
             // Inserto en base de datos (Si es que pase por el Web Service)
             Boolean res = true;
            return res;



         }







     }

Веб-сервис - это метод подключения веб-сервиса, а "InsertoBD" - это когда я помещаю данные в базу данных ... спасибо

Ответы [ 3 ]

0 голосов
/ 18 октября 2011

Я предлагаю вам объявить ProgressDialog в вашей среде Activity.И тогда вы можете попробовать этот код.Это работает для меня:

Класс среды, в котором объявлен AsyncTask:

private ProgressDialog dialog;

...

private class tareaActualizar extends AsyncTask<Void, Void, Boolean> {
         private static final String DEBUG_TAG = "actualizo";

...
@Override
         protected void onPreExecute() {

                    pd = new ProgressDialog(ShamanOperativoActivity.this);

            pd = ProgressDialog.show(getParent().getParent(), "Wait",
                    "Loading...");


         }
...
0 голосов
/ 18 октября 2011

Попробуйте это .....

private class tareaActualizar extends AsyncTask<Void, Void, Void> 

{

private static final String DEBUG_TAG = "actualizo";

         private ProgressDialog pd = new ProgressDialog(ShamanOperativoActivity.this);

        protected void onPreExecute() {
              pd.setMessage("Actualizando...");
             pd.show();

        }

        protected Void doInBackground(Void... para) {

              webService();

             tv2 = resultado.toString();            //Obtengo el string resultado del WebService en tv2

             //Obtengo la hora actual

             insertoEnBD(); 
             // Inserto en base de datos (Si es que pase por el Web Service)
             Boolean res = true;
            return res;


        }

        protected void onPostExecute(Void params) {

              pd.dismiss();

        }
    }
0 голосов
/ 18 октября 2011

Попробуйте изменить способ создания экземпляра ProgressDialog следующим образом:

     @Override
     protected void onPreExecute() {
         pd  = ProgressDialog.show( context, "", "My text is here..." );
     }

Обратите внимание, что если вы используете только эмулятор для тестирования, ProgressDialogs может медленно появляться / исчезать, то есть ваша проблема может не существовать, есливы тестируете на устройстве.

...