Использование класса AsyncTask для параллельной работы и отображение индикатора выполнения
Я отображаю индикатор выполнения, используя класс задач Async и одновременно в параллельной работе, я хочу получить массив строк из функции другого класса, который возвращает некоторое время, чтобы вернуть массив строк.
Проблема заключается в том, что когда я помещаю вызов функции в выполнение функции backgroung класса AsyncTask, он выдает ошибку в Doing Background и выдает сообщение как не могу изменить пользовательский интерфейс при выполнении Background ..
Поэтому я поместил вызов функции в метод Post Execute класса Async task. Это не выдает ошибку, но после того, как индикатор выполнения достигнет 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);
}
}
}
1 ответ
Вы не можете закрыть диалоговое окно в doInBackground() - даже для закрытия диалогового окна требуется задача пользовательского интерфейса. Переместите dialog.dismiss() в onPostExecute() AsyncTask.