У меня есть действие, состоящее из AsyncTask, целью которого является запуск запроса, когда пользователь нажимает кнопку.Я искал ответы, но я не нашел ту же проблему, или это не было для меня.Код делает то, что я хочу, но ProgressDialog выглядит заблокированным, поскольку счетчик иногда не вращается (почти все время).
Когда я нажимаю на кнопку:
AsyncTask запускается -> showDialog () вызывается onPreExecute -> startSearch (SearchManager запускает новый AsyncTask, при котором в doInBackground происходит интенсивный вызов с сетью) -> doInBackground в Activity ожидает загрузки SearchManager -> display.
Код для кнопки:
button_search.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
new SearchTask().execute();
}
});
Код для AsyncTask в поисковой активности:
private class SearchTask extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute(){
showDialog(DIALOG_LOADING_ID);
searchManager.startSearch();
}
@Override
protected Void doInBackground(Void... params) {
while(searchManager.isLoading()){
try {Thread.sleep(150);} catch(Exception e){};
}
return null;
}
@Override
protected void onPostExecute(Void ret){
try {dismissDialog(DIALOG_LOADING_ID);} catch (Exception e){};
if ( searchManager.errorOccurred() ){
//Error
} else {
//No Error
}
}
Код для SearchManagerAsyncTask: непосредственнозапустил startSearch
protected class SearchAsync extends AsyncTask <Void,Void,Void>{
@Override
protected Void doInBackground(ComSearchAds... datas) {
global.getDataManager().doSearch();
//... When finished
setIs_loading(false);
}
}
Я, очевидно, что-то делаю не так, но не могу найти что и как этого избежать.Спасибо за вашу помощь!
РЕШЕНИЕ:
Наконец, кажется, что не вращающийся ProgressDialog был из-за того, что я использовал один и тот же экземпляр ProgressDialog и
showDialog(DIALOG_LOADING_ID);
//doInBackground
dismissDialog(DIALOG_LOADING_ID);
используется с причинами проблемы, я изменил на
removeDialog(DIALOG_LOADING_ID)
и теперь работает нормально.
Спасибо всем, и надеюсь, что это когда-нибудь кому-нибудь поможет!