package cn.mutils.app.data; import android.os.AsyncTask; import cn.mutils.app.queue.QueueItem; @SuppressWarnings("unchecked") public class AsyncDataTask<DATA> extends QueueItem<IAsyncDataTask<DATA>> implements IAsyncDataTask<DATA> { protected DATA mData; protected DataAsyncTask mTask; @Override public DATA getData() { return mData; } @Override public void setData(DATA data) { if (mStarted || mStopped) { return; } mData = data; } @Override public boolean start() { boolean result = super.start(); if (result) { this.mTask = new DataAsyncTask(); this.mTask.execute(); } return result; } @Override public boolean stop() { boolean result = super.stop(); if (result) { if (this.mTask != null) { this.mTask.cancel(true); } } return result; } class DataAsyncTask extends AsyncTask<String, Integer, Object> { protected Object doInBackground(String... paramters) { try { for (IAsyncDataTaskListener<DATA> listener : getListeners(IAsyncDataTaskListener.class)) { listener.onDoInBackground(AsyncDataTask.this, getData()); } return new Object(); } catch (Exception e) { return e; } } protected void onPostExecute(Object object) { for (IAsyncDataTaskListener<DATA> listener : getListeners(IAsyncDataTaskListener.class)) { if (object instanceof Exception) { listener.onException(AsyncDataTask.this, (Exception) object); } else { listener.onComplete(AsyncDataTask.this); } } stop(); } } }