android 請求網絡異步加載

jopen 10年前發布 | 20K 次閱讀 Android 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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!