私はGoogle Calendar APIを使用していて、AsyncTaskでスタックしています。 onPostExecuteは抽象クラスを使用すると呼び出せません。onPostExecuteは、AsyncTask <Void、Void、Boolean>抽象クラスで呼び出されません
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(抽象クラスの1)
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);
}
}
}
私は抽象クラスを使用すると、AsyncTaskを変更しない場合は、この質問から見ることができるようにjavaを次のようにして、onPostExecuteが呼び出されます。誰も明確な説明や案内を提供する限り、解決策がいいだろう、複製、私のコード内の任意の間違いを指摘することができれば私は
...
@Override
protected final Boolean doInBackground(Void... ignored) {
Log.i(TAG, "doInBackground");
return true;
}
...
は本当に感謝しています。
抽象クラスにコードを追加したい場合は、これを行います。