package com.mfh.comna.comn.logic; import android.app.ProgressDialog; import android.content.Context; import com.mfh.comna.utils.DialogUtil; import net.tsz.afinal.http.AjaxCallBack; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 加入了进度条和出错提示或出错日志记录等 * @param <T> * @author zhangyz created on 2013-5-15 * @since Framework 1.0 */ public abstract class AsyncTaskCallBack<T> extends AjaxCallBack<T> { protected Context context; private ProgressDialog progressDialog; private Logger logger = null; protected Logger getLogger() { if (logger == null) logger = LoggerFactory.getLogger(this.getClass()); return logger; } /** * 构造函数 * @param context android上下文。可以为空,若提供了此参数,则会自动出现"等待中..."; * 失败时也会弹出错误信息,否则只会记录日志信息。 */ public AsyncTaskCallBack(Context context) { super(); this.context = context; } public AsyncTaskCallBack() { super(); } @Override public void onStart() { super.onStart(); if (context != null) try { //progressDialog = ProgressDialog.show(context, "请稍等...", "正在处理中...", true); } catch(Throwable ex) { ; } else progressDialog = null; } /** * 留一个机会供子类做任何异常的处理,包括网络请求成功后但后期处理发生的异常。 */ protected void doWhenAnyException(Throwable ex) {;} @Override public void onFailure(Throwable t, String strMsg) { try { if (strMsg == null) strMsg = t.getMessage(); super.onFailure(t, strMsg); doFailure(t, strMsg); } catch(Throwable ex) { doWhenAnyException(ex); getLogger().error(ex.getMessage(), ex); } } @Override public void onSuccess(T t) { super.onSuccess(t); try { if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } doSuccess(t); } catch(Throwable ex) { doWhenAnyException(ex); getLogger().warn(ex.getMessage(), ex); if (context != null) { new DialogUtil(context).showHint(ex.getMessage()); } } } /** * 调用成功后,执行具体的业务逻辑。 * 可抛出异常,框架已经处理异常。 * @param rawValue 原始值 */ protected abstract void doSuccess(T rawValue); /** * 调用失败后,执行具体的失败处理业务逻辑。 * @param t */ protected void doFailure(Throwable t, String errMsg) { if (context != null) { if (t instanceof java.net.UnknownHostException) errMsg = "网络不通,请检查你手机是否正确连上网络!"; new DialogUtil(context).showHint(errMsg); } if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } else { if (errMsg == null) errMsg = ""; getLogger().error(errMsg);//改成记录日志。 } } }