Handler处理HTTP请求的封装

来源:互联网 发布:欧莱雅网络营销策划书 编辑:程序博客网 时间:2024/04/26 17:50

项目中经常用到大量的向server请求,然后返回json, 显示到手机上。

1. 封装Handler

    public  class RequestHandler extends Handler  {
    protected String returnString = null;

    /**
     * @param returnString the returnString to set
     */
    public void setReturnString(String returnString) {
        this.returnString = returnString;
    }

    /* (non-Javadoc)
     * @see android.os.Handler#handleMessage(android.os.Message)
     */
    @Override
    public void handleMessage(Message msg) {
        // TODO Auto-generated method stub
        super.handleMessage(msg);
    }
}


2. 封装Thread

public class RequestHttp extends Thread {
    private RequestHandler handle=null;
    String url=null;
    HashMap <String ,Object> params=null;
    String resMsg="";
    private Message message =null;
    
    public RequestHttp(RequestHandler handler,HashMap<String, Object> params) {
        if(null == handler )
            return;
        this.handle = handler;
        message = handle.obtainMessage();
        this.url=HttpUtil.HttpDataSyncServiceUrl;
        this.params=params;
    }
    
    @Override
    public void run() {
        super.run();
        try {
            //web请求,result为返回结果
            callHttp();
            message.what =Constant.HTTP_RESPONSE_OK;
        } catch (Exception ex) {
            message.what =Constant.EXCEPTION;
            resMsg=ex.getMessage();
            //resObj.setResInfo(resMsg);
        } finally {
            handle.sendMessage(message);
        }
    }
    
    private void callHttp() {
            Log.d("Time","Callstart:"+String.valueOf(new Date()));
            // web请求
            handle.setReturnString(HttpUtil.sendPostRequest(params, url));
            // 得到返回结果
            Log.d("Time","CallEnd:"+String.valueOf(new Date()));
    }

}


3. 使用

//call server to down data
    private void callServerFr(){
        processInfo = new TransparentDialog(ctx);
        processInfo.initProgressDialog();
        HashMap<String, Object> params = new HashMap<String, Object>();
        params.put("action", "GETFRCAMPS");// 加入方法参数
        //params.put("userId", app.getUid());// 加入参数
        params.put("storeCode", currStore.getStoreCode());
        params.put("camps", getCampiagnVersionFr());
        (new RequestHttp(handlerFr, params)).start();
    }

    // 生成消息对象
    RequestHandler handlerFr  = new RequestHandler(){
         public void handleMessage(Message m){
            switch (m.what) {
            case Constant.HTTP_RESPONSE_OK:
                if (returnString != null) {
                    boolean res=dao.saveFrCampaignFromServer(returnString);                    
                    if(res){
                        Intent intent = new Intent();
                        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        intent.setClass(CampaignHome.this, FrCampaignList.class);
                        startActivity(intent);
                    }else{
                        PageUtil.inform(ctx,"出错了,请重试" );
                    }
                }
                if (null != processInfo)
                    processInfo.progressDialog.dismiss();
                break;
            default:
                if (null != processInfo)
                    processInfo.progressDialog.dismiss();
            }
        }
     };