Вы правы в своей оценке ошибки.Я предполагаю, что text
является TextView
объектом, который определен в вашем Activity
, и поэтому он создается в потоке пользовательского интерфейса.Код, который выполняется в doInBackground()
, выполняется в отдельном потоке.Только поток пользовательского интерфейса может выполнять обновления элементов пользовательского интерфейса, поэтому, когда вы пытаетесь вызвать setText
, вы получаете сообщение об ошибке, о котором вы сообщили.
Abhinav также прав, как исправить проблему, как AsyncTask
есть метод, который вы можете вызвать для отправки обновлений из фонового потока в поток пользовательского интерфейса: publishProgress
, который вызывает onProgressUpdate()
.
Добавьте этот метод к вашему AsyncTask
:
@Override
protected void onProgressUpdate(Integer... integer){
text.setText(integer[0].toString());
}
И изменить цикл while
в download()
:
while ( (len1 = in.read(buffer)) != -1 )
{
f.write(buffer,0, len1);
downloadedSize += len1;
publishProgress(downloadedSize);
}