Je travaille avec l'API Google Calendar et suis coincé avec AsyncTask. OnPostExecute ne peut pas être appelé si j'utilise la classe abstraite.OnPostExecute n'est pas appelé dans AsyncTask <Void, Void, Boolean> avec la classe abstraite
MakeRequestTask.java
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.util.Log;
import com.google.api.client.googleapis.extensions.android.gms.auth.GooglePlayServicesAvailabilityIOException;
import com.google.api.client.googleapis.extensions.android.gms.auth.UserRecoverableAuthIOException;
import java.io.IOException;
import java.util.List;
abstract class MakeRequestTask extends AsyncTask<Void, Void, Boolean> {
private String TAG = "MakeRequestTask";
final MainActivity mainactivity;
final com.google.api.services.calendar.Calendar mService;
private Exception mLastError = null;
ProgressDialog loading = null;
//Calendar service;
MakeRequestTask(MainActivity mainactivity) {
this.mainactivity = mainactivity;
this.mService = mainactivity.mService;
loading = new ProgressDialog(mainactivity);
loading.setCancelable(true);
loading.setMessage("Sync with Google Calendar";
loading.setProgressStyle(ProgressDialog.STYLE_SPINNER);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.i(TAG, "onPreExecute");
mainactivity.numAsyncTasks++;
loading.show();
}
@Override
protected final Boolean doInBackground(Void... ignored) {
Log.i(TAG, "doInBackground");
try {
doInBackground();
return true;
} catch (final GooglePlayServicesAvailabilityIOException availabilityException) {
mainactivity.showGooglePlayServicesAvailabilityErrorDialog(
availabilityException.getConnectionStatusCode());
} catch (UserRecoverableAuthIOException userRecoverableException) {
mainactivity.startActivityForResult(
userRecoverableException.getIntent(), MainActivity.REQUEST_AUTHORIZATION);
} catch (IOException e) {
//Utils.logAndShow(activity, MainActivity.TAG, e);
Log.i(TAG, "IOException" + e);
}
return false;
}
@Override
protected final void onPostExecute(Boolean success) {
super.onPostExecute(success);
Log.i(TAG, "onPostExecute");
loading.cancel();
if (0 == --mainactivity.numAsyncTasks) {
}
if (success) {
}
}
abstract protected void doInBackground() throws IOException;
}
AsyncLoadEvent.java (un de la classe abstraite)
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import com.google.api.client.util.DateTime;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.Events;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
class AsyncLoadEvent extends MakeRequestTask {
private String TAG = "AsyncLoadEvent";
AsyncLoadEvent(MainActivity mainActivity) {
super(mainActivity);
this.mainActivity = mainActivity;
}
@Override
protected void doInBackground() throws IOException {
Log.i(TAG, "doInBackground");
try {
......
} catch (Exception e) {
Log.i(TAG, "Exception" + e);
cancel(true);
}
}
}
Comme vous pouvez le voir sur cette question, si je ne me classe abstraite et changer la AsyncTask java à comme suit, onPostExecute sera appelé.
...
@Override
protected final Boolean doInBackground(Void... ignored) {
Log.i(TAG, "doInBackground");
return true;
}
...
Je suis vraiment apprécier si quelqu'un pouvait signaler toute erreur dans mon code, même en double solution sera agréable, aussi longtemps que fournir une explication claire ou un guide.
Si vous voulez plus de code dans ma classe abstraite, je le ferai.