У меня есть структура Asyntask:
private class GetMyFlights extends AsyncTask<String, Void, Integer> {
private ProgressDialog dialog;
public GetMyFlights(ListActivity activity) {}
protected void onPreExecute() {
if(mFirstOpen){
mFirstOpen = false;
dialog = new ProgressDialog(mCtx);
this.dialog.setMessage(getResources().getString(R.string.common_getting_data));
this.dialog.show();
}
}
@Override
protected Integer doInBackground(String... params) {
return getData();
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
//if(mFinishGettingData){ //global variable
mFinishGettingData = false;
switch(result){
case 0:
//...
break;
case 1:
//...
break;
case 2:
//...
break;
}
//}
}
}
И мой метод getData:
private int getData() {
try{
myFlightsA = new FlightAdapter(this, R.layout.row_myflight, WithingsAPI.getInstance().getFutureFlights());
//mFinishGettingData = true;
if(myFlightsA != null)
return 0;
}catch(NetworkConnetionException e){
if(e.getMessage().equals(NetworkConnetionException.ERROR_CONNECTION))
return 1;
else if(e.getMessage().equals(NetworkConnetionException.NOT_LOGGED)){
Log.d(TAG, "Not Logged");
return 2;
}
}catch(Exception e){
Log.d(TAG, e.toString());
}
return 3;
}
Но я не знаю, делаю ли я что-то неправильно, так как иногда Задача работает какожидается, но иногда появляется диалоговое окно, поскольку getData возвращает 3, а затем 1.
Я думал об использовании глобальной переменной mFinishGettingData
для уведомления об окончании работы сети.А также верните 4 вместо 3, чтобы потом не совпадать ни с одним.