Android - диалоговое окно прогресса падает при изменении сообщения

Я новичок в Android и учусь создавать диалоговое окно прогресса. Я хочу менять сообщение в диалоге каждые пару секунд, но мое приложение вылетает, когда я меняю сообщение. Любые идеи, что я могу делать неправильно?

private void progressDialogTest(final ArrayList<String> messages)
    {
        AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() 
        {
            private ProgressDialog progressDialog;

            @Override
            protected void onPreExecute() 
            {
                progressDialog = new ProgressDialog(MainActivity.this);
                progressDialog.setTitle("Progress Dialog");
                progressDialog.show();
            }

            @Override
            protected Void doInBackground(Void... arg0) 
            {
                try 
                {
                    for(int i=0; i<messages.size(); i++)
                    {
/******** APPLICATION SEEMS TO CRASH AT LINE BELOW ********/
                        progressDialog.setMessage(messages.get(i));
                        Thread.sleep(3000);
                    }
                } 
                catch (InterruptedException e) 
                {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) 
            {
                progressDialog.dismiss();
            }
        };
        task.execute((Void[])null);
    }

введите здесь описание изображения


person Community    schedule 18.06.2013    source источник
comment
Вы получаете доступ к элементам пользовательского интерфейса из фона, попробуйте использовать функцию publishProgress. Погугли это.   -  person Karthik Balakrishnan    schedule 18.06.2013


Ответы (1)


Вместо этого переместите код в onProgressUpdate, например:

@Override
protected void onProgressUpdate(Integer... progress) {
    super.onProgressUpdate(progress);
    progressDialog.setMessage(messages.get(progress[0]));
}

@Override
protected void doInBackground(Void... arg0) {
    /* ... */

    //progressDialog.setMessage(messages.get(i)); Change this line to
    publishProgress(i);

    /* ... */
}
person Chor Wai Chun    schedule 18.06.2013