Android通过webservice请求数据

来源:互联网 发布:学象棋的软件 编辑:程序博客网 时间:2024/04/30 11:59
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文档的URLHttpTransportSE 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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}return show;}}

传递参数:
Runnable runnable = new Runnable() {@Overridepublic 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对象//}};

解析数据

//接受子线程发送的数据, 并用此数据配合主线程更新UIprivate 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 blocke.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();//线程启动

0 0
原创粉丝点击