2013-05-13 2 views
0

у меня есть общий вопрос:Вызов внешнего метода из AsyncTask и обновления ProgressDialog с данными этого метода внешнего

Можно ли обновлять ProgressDialog сообщение с данными, поступающими из метода, который вызывается с помощью AsyncTask

doInBackground(Void... arg0) 

Цель: метод генерации и возвращает файл. В зависимости от объема данных это может занять более или менее время. Я хотел бы сообщить пользователю о прогрессе, указав текущий номер страницы генерирующего файла (номер страницы - это значение во внешнем методе).

любые предложения о том, как получить доступ к значению и показать его в ProgressDialog?

Я уже пробовал: объявляя число страниц общественности и статический доступ к нему из

onProgressUpdate(

с кодом ниже стоимости страницы и возвращается его первоначальное значение, однако его не обновлять какие-либо идеи, чтобы получить обновленное значение ?:

public class prepareFile extends AsyncTask<String, String, String> { 

    @Override 
    protected void onProgressUpdate(String... values) { 
     // TODO Auto-generated method stub 
     super.onProgressUpdate(values); 
     progressDialog.setMessage(getResources().getString(
       R.string.CalcGatheringInformation)+"\n"+Filehandler.pages+" - "+values); 
    } 

    @Override 
    protected String doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 

     publishProgress(String.valueOf(Filehandler.pages)); 
     prepareFiles(); 

     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     progressDialog.dismiss(); 
      } 
} 

Спасибо,

ответ

1

onProgressUpdate вызывается после publishProgress, и вы делаете это только один раз, прежде чем даже начать готовить файл с prepareFiles - вот почему он не меняется позже и показывает начальное значение.

Я считаю, что вы должны сделать что-то по

@Override 
protected String doInBackground(String... arg0) { 
    // TODO Auto-generated method stub 

    while(!allPagesPrepared()){ 
     publishProgress(String.valueOf(Filehandler.pages)); 
     preparePage(); 
    } 

    return null; 
} 

или разделить prepareFiles работу каким-либо другим способом и вызвать publishProgress каждые несколько шагов вашего алгоритма загрузки.

Смежные вопросы