saintbyte
@saintbyte
Django developer

Доступ к ProgressBar из AsyncTask?

Есть примерно такой код:
class DownloadEventData
{
   private Integer i1;
   private Integer i2;
  public DownloadEventData(Integer i1 , Integer  i2) 
  {
     this.i1 = i1;
     this.i2 = i2;
  }
  Тут геттеры и сеттеры
}
class DownloadTask extends AsyncTask<String,DownloadEventData,Integer>
{
       private ProgressBar pb;
       public void setPb(ProgressBar p)
       {
              this.pb = p;
       }
       @Override
	protected String doInBackground(String... params) {
           ...
             publishProgress(new DownloadEventData([сколько скачалось],[сколько всего качать]));
           ...
        }
       @Override
	protected void onProgressUpdate(DownloadEventData...values) {
                 this.pb.setMax(values[0].getI2);
                 this.pb.setProcess(values[0].getI1);
		super.onProgressUpdate(values);
	}
	//---------------------------------------------------------------
	protected void onPreExecute(Integer result) 
	{
	  super.onPreExecute();
	}
	@Override
	protected void onPostExecute(Integer result) 
	{
	  
	}
}


И использую я код так:
ProgressBar ppp = (ProgressBar) findViewById(R.id.progressbar);
DownloadTask dt = new DownloadTask();
dt.setPd(ppp);
dt.execute("http://yandex.ru");


Падает это дело на this.pb.setMax(values[0].getI2); c
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setMax(int)' on a null object reference

Даже не падает а уходит в finally где e.printStackTrace()

Насколько я понимаю только doInBackground в отдельном потоке, а все остальное в UI - так подобных проблем быть не должно, что я не так делаю ?
  • Вопрос задан
  • 2525 просмотров
Решения вопроса 1
anyd3v
@anyd3v
я бы на вашем месте
1. Проверил правильно ли устанавливается
ProgressBar ppp = (ProgressBar) findViewById(R.id.progressbar);


2. Сделать конструктор для DownloadTask с параметром ProgressBar, а не через сеттер
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы