Android异步请求通用封装类

来源:互联网 发布:英语入门学软件 编辑:程序博客网 时间:2024/05/04 17:45
package com.suniot.caigou.task;import java.util.concurrent.Callable;import java.util.concurrent.Executors;import android.app.ProgressDialog;import android.content.Context;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.os.AsyncTask;import com.lyh.lib.utils.DebugLog;import com.lyh.lib.utils.CommonUtils;import com.suniot.caigou.widgets.CustomProgressDialog;public class EMobileTask {public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback) {EMobileTask.doAsync(pContext, pTitleResID, pMessageResID, pCallable, pCallback, null, false);}public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback) {EMobileTask.doAsync(pContext, pTitle, pMessage, pCallable, pCallback, null, false, false);}public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final boolean pCancelable) {EMobileTask.doAsync(pContext, pTitleResID, pMessageResID, pCallable, pCallback, null, pCancelable);}public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback, final boolean pCancelable) {EMobileTask.doAsync(pContext, pTitle, pMessage, pCallable, pCallback, null, pCancelable, true);}public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {EMobileTask.doAsync(pContext, pTitleResID, pMessageResID, pCallable, pCallback, pExceptionCallback, false);}public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {EMobileTask.doAsync(pContext, pTitle, pMessage, pCallable, pCallback, pExceptionCallback, false, false);}public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback, final boolean pCancelable) {EMobileTask.doAsync(pContext, pContext.getString(pTitleResID), pContext.getString(pMessageResID), pCallable, pCallback, pExceptionCallback, pCancelable, true);}public static <T> void doAsync(final Context pContext, final CharSequence pTitle, final CharSequence pMessage, final Callable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback, final boolean pCancelable, final boolean showDialog) {new AsyncTask<Void, Void, T>() {private CustomProgressDialog mDialog = null;private Exception mException = null;@Overridepublic void onPreExecute() {if (showDialog) {try {mDialog = CustomProgressDialog.createDialog(pContext);mDialog.setMessage(pMessage);mDialog.setCanceledOnTouchOutside(false);mDialog.show();} catch (Exception e) {DebugLog.e(e.toString());}}if (pCancelable) {mDialog.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface pDialogInterface) {pExceptionCallback.onCallback(new CancelledException());pDialogInterface.dismiss();}});}super.onPreExecute();}@Overridepublic T doInBackground(final Void... params) {try {return pCallable.call();} catch (Exception e) {DebugLog.e(e.toString());mException = e;}return null;}@Overridepublic void onPostExecute(final T result) {try {if (mDialog != null)mDialog.dismiss();} catch (Exception e) {DebugLog.e(e.toString());}if (isCancelled()) {mException = new CancelledException();}if (mException == null) {try {pCallback.onCallback(result);} catch (Exception e) {DebugLog.e(e.toString());mException = e;}}if (pExceptionCallback != null && mException != null) {pExceptionCallback.onCallback(mException);}super.onPostExecute(result);}}.executeOnExecutor(Executors.newCachedThreadPool());}public static <T> void doProgressAsync(final Context pContext, final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback) {EMobileTask.doProgressAsync(pContext, pTitleResID, pCallable, pCallback, null);}public static <T> void doProgressAsync(final Context pContext, final int pTitleResID, final ProgressCallable<T> pCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {new AsyncTask<Void, Integer, T>() {private ProgressDialog mPD;private Exception mException = null;@Overridepublic void onPreExecute() {this.mPD = new ProgressDialog(pContext);this.mPD.setTitle(pTitleResID);this.mPD.setIcon(android.R.drawable.ic_menu_save);this.mPD.setIndeterminate(false);this.mPD.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);this.mPD.show();super.onPreExecute();}@Overridepublic T doInBackground(final Void... params) {try {return pCallable.call(new IProgressListener() {@Overridepublic void onProgressChanged(final int pProgress) {onProgressUpdate(pProgress);}});} catch (final Exception e) {this.mException = e;}return null;}@Overridepublic void onProgressUpdate(final Integer... values) {this.mPD.setProgress(values[0]);}@Overridepublic void onPostExecute(final T result) {try {this.mPD.dismiss();} catch (final Exception e) {CommonUtils.log(String.format("%s->onPostExecute3->%s", EMobileTask.class.getSimpleName(), pContext.getClass().getSimpleName()), e.getLocalizedMessage());}if (this.isCancelled()) {this.mException = new CancelledException();}if (this.mException == null) {pCallback.onCallback(result);} else {if (pExceptionCallback == null) {CommonUtils.log(String.format("%s->onPostExecute4->%s", EMobileTask.class.getSimpleName(), pContext.getClass().getSimpleName()), this.mException.getLocalizedMessage());} else {pExceptionCallback.onCallback(this.mException);}}super.onPostExecute(result);}}.executeOnExecutor(Executors.newCachedThreadPool());}public static <T> void doAsync(final Context pContext, final int pTitleResID, final int pMessageResID, final AsyncCallable<T> pAsyncCallable, final Callback<T> pCallback, final Callback<Exception> pExceptionCallback) {final ProgressDialog pd = ProgressDialog.show(pContext, pContext.getString(pTitleResID), pContext.getString(pMessageResID));pAsyncCallable.call(new Callback<T>() {@Overridepublic void onCallback(final T result) {try {pd.dismiss();} catch (final Exception e) {CommonUtils.log(String.format("%s->onCallback->%s", EMobileTask.class.getSimpleName(), pContext.getClass().getSimpleName()), e.getLocalizedMessage());}pCallback.onCallback(result);}}, pExceptionCallback);}public static class CancelledException extends Exception {private static final long serialVersionUID = -78123211381435595L;}}

package com.suniot.caigou.task;public interface AsyncCallable<T> {public void call(final Callback<T> pCallback, final Callback<Exception> pExceptionCallback);}

package com.suniot.caigou.task;public interface Callback<T> {/** * 当加载完成后回调,加载完毕的事后处理 */public void onCallback(final T pCallbackValue);}

package com.suniot.caigou.task;public interface IProgressListener {public void onProgressChanged(final int pProgress);}

package com.suniot.caigou.task;public interface ProgressCallable<T> {public T call(final IProgressListener pProgressListener) throws Exception;}

0 0
原创粉丝点击