저는 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 (추상 클래스 중 하나)
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;
}
...
정말 감사드립니다.
당신이 내 추상 클래스에 더 많은 코드를 원한다면 그렇게 할 것입니다.