Есть примерно такой код:
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 - так подобных проблем быть не должно, что я не так делаю ?