项目中经常用到大量的向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
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. 使用
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();
}
}
};