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
- Android异步请求通用封装类
- android Http异步请求封装
- Android简单封装类似JQuery异步请求
- Android简单封装类似JQuery异步请求
- AJAX异步请求封装
- Android简单封装类似JQuery异步请求代码
- android http多请求异步封装对你绝对有用
- android http多请求异步封装对你绝对有用
- Android之封装好的异步网络请求框架
- iOS系统异步请求封装
- 封装AsyncTask异步请求网络
- android 通用view封装
- Android 通用Adapter封装
- android基于开源网络框架asychhttpclient,二次封装为通用网络请求组件
- 关于Android高性能Restful请求的通用封装(单Retrofit和Retrofit+RxJava)
- Android 封装http请求的工具类
- Android 封装http请求的工具类
- Android 封装http请求的工具类
- Linux 多线程编程
- 使用python scrapy爬虫框架 爬取科学网自然科学基金数据
- 这个dll_CopycatAndHide 的masm源代码
- compass实现搜索、订单载入功能、velocity模版静态化、OSCache优化性能、SSI实现
- DLL开发之得到注册码及其使用
- Android异步请求通用封装类
- Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件
- 第八周项目一实现复数类中的运算符重载(1)
- Mac如何快速打开资源库文件夹
- 网络编程Select模型
- 标准的一份栈回溯代码
- 第11课作业
- InputAccessoryView的使用方法
- SQLLite (一)基本介绍