использование класса AsyncTask для параллельной работы и отображение индикатора выполнения

1

Я показываю индикатор выполнения с использованием класса задач Async и параллельно работаю в параллельном режиме, я хочу получить массив строк из функции другого класса, которая занимает некоторое время, чтобы вернуть массив строк.

Проблема заключается в том, что когда я помещаю вызов функции при выполнении функции backgroung класса AsyncTask, он дает ошибку в Doing Background и дает сообщение как can not изменение пользовательского интерфейса при выполнении Background.

Поэтому я поместил вызов функции в метод post Execute класса Asynctask. Он не дает ошибки, но после того, как индикатор выполнения достиг 100%, тогда экран становится черным и занимает некоторое время, чтобы начать новую активность.

Как я могу отобразить индикатор выполнения и одновременно вызвать вызов функции.

вот код

package com.integrated.mpr;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class Progess extends Activity implements OnClickListener{



    static String[] display = new String[Choose.n];
    Button bprogress;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.progress);  
        bprogress = (Button) findViewById(R.id.bProgress);
        bprogress.setOnClickListener(this); 
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        switch(v.getId()){
        case R.id.bProgress:        
            String x ="abc";    
            new loadSomeStuff().execute(x);     
            break;
        }
    }

    public class loadSomeStuff extends AsyncTask<String , Integer , String>{

        ProgressDialog dialog;
        protected void onPreExecute(){
            dialog = new ProgressDialog(Progess.this);
            dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            dialog.setMax(100);
            dialog.show();
        }
        @Override
        protected String doInBackground(String... arg0) {
            // TODO Auto-generated method stub

            for(int i = 0 ;i<40;i++){
                publishProgress(5);

                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            dialog.dismiss();
            String y ="abc";
            return y;
        }

        protected void onProgressUpdate(Integer...progress){

            dialog.incrementProgressBy(progress[0]);
        }

        protected void onPostExecute(String result){
            display = new Logic().finaldata();
            Intent openList = new Intent("com.integrated.mpr.SENSITIVELIST");
            startActivity(openList);    
        }
    }
}
Теги:
android-asynctask
android-progressbar

1 ответ

0
Лучший ответ

Вы не можете отменить диалог в doInBackground() - даже отклонение диалога требует задачи пользовательского интерфейса. Переместите dialog.dismiss() в onPostExecute() для AsyncTask.

  • 0
    я должен поместить dialog.dismiss () в задаче пользовательского интерфейса ??
  • 0
    onPostExecute выполняется для задачи пользовательского интерфейса.
Показать ещё 14 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню