android调用带soapheader的webservice
OK~~接着前面写,这次介绍的是android调用.net的带soapheader的webservice,
布局文件很简单就一个button,网上有很多教程讲了android怎么调用webservice,好像带soapheader的很少~~好吧。。那就开始吧。。首先我们需要一个jar文件~~可以去网上搜ksoap2,我这里用的是ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar,具体代码见下面。。给出部分注释~~
package Taling.ChangePwd; import android.app.Activity; import android.os.Bundle; import org.kxml2.kdom.Element; import org.kxml2.kdom.Node; import android.view.View; import android.widget.Button; import android.widget.Toast; import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.PropertyInfo; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapPrimitive; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.HttpTransportSE; public class ChangePwdMain extends Activity { private Button okButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); okButton = (Button) this.findViewById(R.id.btnLogin); okButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { getInfo(); } }); } //命名空间 private static final String NAMESPACE = "http://taling.hnie.edu.cn/"; private static String URL = "http://taling.hnie.edu.cn/sljchangepwd/changepwdservice.asmx"; //调用的方法名 private static final String METHOD_NAME = "UpdateUser"; //此处是命名空间+方法名 private static String SOAP_ACTION = "http://taling.hnie.edu.cn/UpdateUser"; private SoapPrimitive detail; public void getInfo() {//主要代码在这里 try { SoapObject rpc = new SoapObject(NAMESPACE, METHOD_NAME); //此处2个propertyinfo,是updateuser方法所需的参数,代码下面贴出asmx代码 PropertyInfo pi = new PropertyInfo(); pi.setName("uid"); pi.setValue("24058"); rpc.addProperty(pi); pi = new PropertyInfo(); pi.setName("password"); pi.setValue("321"); rpc.addProperty(pi); //soapheader在这里 Element[] header = new Element[1]; header[0] = new Element().createElement(NAMESPACE, "MySoapHeader"); Element username = new Element().createElement(NAMESPACE, "Admin"); username.addChild(Node.TEXT, "这里你填的"); header[0].addChild(Node.ELEMENT, username); Element pass = new Element().createElement(NAMESPACE, "Password"); pass.addChild(Node.TEXT, "这里你填的"); header[0].addChild(Node.ELEMENT, pass); SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.headerOut = header; envelope.bodyOut = rpc; envelope.dotNet = true; envelope.setOutputSoapObject(rpc); HttpTransportSE ht = new HttpTransportSE(URL); ht.call(SOAP_ACTION, envelope); //此处如果用soapobject会报错 detail =(SoapPrimitive) envelope.getResponse(); Toast.makeText(this, detail.toString(), Toast.LENGTH_LONG).show(); return; } catch (Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); } } }
上面代码header[0] = new Element().createElement(NAMESPACE, "MySoapHeader"); 此处的MySoapHeader与上面asmx里的MySoapHeader要相同。。。OK。。。就到这吧。。希望对您有帮助~~
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
Post Comment
网上n个雷同的内容,就知道抄袭。。