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。。。就到这吧。。希望对您有帮助~
;
posted @ 2014-07-10 10:23  bin89  阅读(444)  评论(0)    收藏  举报