ProgressDialog, использующий AsyncTask, создающий неопределенную конструкторскую ошибку - PullRequest
0 голосов
/ 01 марта 2012
public class async extends AsyncTask<String, Integer, String>{
ProgressDialog prog;
@Override
protected void onPreExecute() {

    super.onPreExecute();
    prog=new ProgressDialog(async.this);//This is chowing error 
    prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    prog.setMax(100);
    prog.show();

}

    @Override
    protected String doInBackground(String... params) {
        for (int i = 0; i < 10; i++) {
        publishProgress(5);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return null;
    }

@Override
protected void onPostExecute(String result) {

    super.onPostExecute(result);
    prog.dismiss();
}
@Override
protected void onProgressUpdate(Integer... values) {
    prog.setProgress(values[0]);
    super.onProgressUpdate(values);
}
}

Приведенный выше код выдает ошибку:

конструктор ProgressDialog (AndroidasynctaskActivity.async) не определено

Почему это так? Может кто-нибудь, пожалуйста, помогите мне решить эту проблему?

Ответы [ 2 ]

6 голосов
/ 01 марта 2012

Как уже упоминалось, причина этого заключается в том, что используемому конструктору ProgressDialog нужен объект Context. Вот один пример того, как вы можете сделать это.

Измените класс async и добавьте конструктор с одним аргументом, который принимает объект Context. Затем измените метод onPreExecute, чтобы использовать указанный Context. Например:

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

  private Context context;
  ProgressDialog prog;

  public async(Context context) {
    this.context = context;
  }


  @Override
  protected void onPreExecute() {
    super.onPreExecute();
    prog=new ProgressDialog(context); 
    prog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    prog.setMax(100);
    prog.show();
  }

  // ...
}

Затем создать экземпляр и запустить это AsyncTask:

async mTask = new async(context);
mTask.execute(params);
2 голосов
/ 01 марта 2012

Асинхронные задачи не предоставляют приложение или контекст активности.Возможно, вам придется передать контекст, если этот класс содержится в действии, которое его вызвало.

...