android 請求網絡異步加載
/*** 封裝ProecssDialog對話框 * */ public class LoadDialog extends ProgressDialog { private String title = "進度對話框"; private String message = "加載數據中...."; public LoadDialog(Context context, int theme) { super(context, theme); } /** * 用默認的標題和內容來創建對話框 * @param context */ public LoadDialog(Context context) { super(context); initDialog(); } /** * 用指定的標題和內容來創建對話框 * @param context * @param title * @param message */ public LoadDialog(Context context,String title,String message){ super(context); if(title != null){ this.title = title; } if(message != null){ this.message = message; } initDialog(); } /** * 初始化對話框參數,默認對話框不可以取消 */ public void initDialog(){ setTitle(title); setMessage(message); setProgressStyle(ProgressDialog.STYLE_SPINNER); setCancelable(false); } /** * 打開對話框,設置回調方法,傳遞需要執行業務方法的類模板,方法名和參數列表 * @param callback 回調方法,該方法在對話框關閉后回調,并獲取返回的數據 * @param serviceClass 執行業務方法的類模板 * @param method 執行業務方法的方法名 * @param params 執行業務方法的參數列表 */ public void execute(Callback callback,Class serviceClass,String method,Object... params){ super.show(); ServiceAysnTask task = new ServiceAysnTask(callback,serviceClass,method); task.execute(params); } /** * 回調方法的接口 * */ public interface Callback{ public void getResult(Map map); } /** * 與遠程服務通信的線程類 * @author BDK * AsyncTask 異步任務 */ private class ServiceAysnTask extends AsyncTask<Object,Object,Map>{ private Class serviceClass; private String method; private Callback callback; public ServiceAysnTask(Callback callback,Class serviceClass,String method){ this.callback = callback; this.serviceClass = serviceClass; this.method = method; } @Override protected Map doInBackground(Object... params) { Map resultMap = null; try { Object obj = serviceClass.newInstance();//創建類模板對象 Class [] paramTypes = new Class[params.length]; for (int i = 0; i < paramTypes.length; i++) { paramTypes[i] = params[i].getClass(); } //根據類模板得到方法 Method m = serviceClass.getMethod(method, paramTypes); resultMap = (Map) m.invoke(obj, params); } catch (Exception e) { e.printStackTrace(); } LoadDialog.this.cancel(); return resultMap; } @Override protected void onPostExecute(Map result) { super.onPostExecute(result); if(result == null){ Toast.makeText(LoadDialog.this.getContext(), "網絡通信異常", Toast.LENGTH_LONG).show(); return; } callback.getResult(result); } } } </pre><br />
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!