webservice帮助类
import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;
public class WebServiceHelper {
private static final String NAMESPACE = "http://services.mobile.zhijie.com";
// WSDL文档的URL 注意这里要用ip,即使是本机也不能用localhost或者127.0.0.1代替
private static final String URL = "http://192.168.1.112:8080/mmws/services/mmws";
// 定义调用的WebService方法名
/**
*
* @param str (json字符串)
* @param methodName(方法名)
* @return
*/
public static String sayHello(String sid,String str,String methodName) {
String show = null;
// 指定WebService的命名空间和调用的方法名利用SoapObject类
// 第1个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。
// 第2个参数表示要调用的WebService方法名
SoapObject request = new SoapObject(NAMESPACE, methodName);
// 设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步。设置方法的参数值的代码如下
// 要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
if(sid!=null){
request.addProperty("sid", sid);
}
request.addProperty("params", str);
// 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述
// 构造方法设置SOAP协议的版本号:该版本号需要根据服务端WebService的版本号设置
// SoapSerializationEnvelope对象后,不要忘了设置SoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第1步创建的SoapObject对象。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
envelope.dotNet = false;
envelope.setOutputSoapObject(request);
//创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL
HttpTransportSE transport = new HttpTransportSE(URL);
//transport.debug = true;
// web service请求
try {
//使用call方法调用WebService方法
transport.call(NAMESPACE+methodName, envelope);
//使用getResponse方法获得WebService方法的返回结果
SoapObject result = (SoapObject)envelope.bodyIn;
show=(String)result.getProperty(0).toString();
} catch (SoapFault e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return show;
}
}
传递参数:
Runnable runnable = new Runnable() {
@Override
public void run() {//run()在新的线程中运行
String show = "";
try {
//参数格式,json字符串 和方法名
String sId = preferences.getString("sId", "");
String idCard = preferences.getString("idCard", "");
String mobile = preferences.getString("mobile","");
System.out.println(idCard);
show = WebServiceHelper.sayHello("{\"sid\":\"" + sId + "\"}","{\"idCard\":\"" + userName+ "\",\"mobile\":\""+mobile+"\"}","doBindingHCardMmed");
} catch (Exception e) {
mHandler.obtainMessage(MSG_FAILURE).sendToTarget();//获取图片失败
return;
}
mHandler.obtainMessage(MSG_SUCCESS,show).sendToTarget();//获取图片成功,向ui线程发送MSG_SUCCESS标识和bitmap对象
//
}
};
解析数据
//接受子线程发送的数据, 并用此数据配合主线程更新UI
private Handler mHandler = new Handler() {
public void handleMessage (Message msg) {//此方法在ui线程运行
switch(msg.what) {
case MSG_SUCCESS:
JSONObject jsonObj;
try {
jsonObj = new JSONObject(msg.obj+"");
if("0".equals(jsonObj.get("code")+"")){
Toast.makeText(BangDJMJKKActivity.this, "您的居民健康卡绑定成功", Toast.LENGTH_LONG).show();
Editor editor = preferences.edit();
editor.putString("medHealthCard", userName);
editor.commit();
Intent intent = new Intent();
intent.setClass(BangDJMJKKActivity.this, JuMJKKActivity.class);
startActivity(intent);
finish();
}else{
Toast.makeText(getApplication(), jsonObj.get("message")+"", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
case MSG_FAILURE:
Toast.makeText(getApplication(), getApplication().getString(R.string.error_conn), Toast.LENGTH_LONG).show();
break;
}
}
};
调用:
<span style="white-space:pre"> </span>mThread = new Thread(runnable);
mThread.start();//线程启动