• Android调用WebService


     最近开始物联网方面的学习,第一次接触Android开发,学习中遇到了需要调用PC端WebService的问题,现在将自己学习到的知识记录下来,以便今后复习。

     准备工作:

            1下载第三方类库Ksoap2。

            2.使用Eclipse新建Android项目并将下载过来的Ksoa2复制进Android项目lib文件夹下。

            3.使用VS2012新建一个WebService并发布在IIS上

      调用WebService具体步骤:

            1.创建一个SoapObject对象

    SoapObject soapObject = new SoapObject(namepace, methodName);

       namepace为命名空间,methodName为要调用的方法

       2.设置要调用方法的参数,若果方法没有参数可不填

    soapObject.addProperty(“param1”,”value”);
    soapObject.addProperty(“param2”,”value”);

       param为参数名,value为参数值

       3.创建SoapSerializationEnvelope对象并将第一步创建的soapobject赋值给boduOut属性

    SoapSerializationEnvelope sse= new SoapSerializationEnvelope(SoapEnvelope.VER10);
    sse.bodyOut = soapObject ;

       SoapEnvelope.VER10为SOAP的版本号,根据服务端的版本号设置

       4.创建HttpTransportSE对象

    HttpTransportSE htse= new HttpTransportSE(URL);

        URL为WebService的WSDL文档地址

       5.调用Call方法获得返回值  

    htse.call(namepace + methodName, sse)

       call的第一个参数为命名空间+方法名的String值,第二个参数为第三步创建的SoapSerializationEnvelope

       6.保存返回值

    SoapObject soapResponse = (SoapObject) sse.bodyIn;
    String result = soapResponse.getProperty(0).toString();

       使用SoapSerializationEnvelope类的bodyIn属性得到返回的SoapObject,并赋值给String。

      注意点:1.在Android4.0后访问网络的方法不能再UI线程中执行,需新建一个Thred

          2.在AndroidManifest文件夹添加访问网络的权限

            <uses-permission android:name="android.permission.INTERNET" /> 

          3.子线程禁止更新UI,所以若想将WebService中返回的数据显示在界面上需要使用Handle和Message

        接下来将演示调用新建的WebService自带的HelloWrod方法。

    public class MainActivity extends Activity {
        private EditText et_URL;
        private SoapObject soap;
        private SoapObject soapResponse;
    
        private String namepace = "http://tempuri.org/";
        private String methodName = "HelloWorld";
        private String URL;
        private SoapSerializationEnvelope sse;
        private String result;
        private Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                ((TextView) findViewById(R.id.textView1)).setText((String) msg.obj);
            };
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
        }
        public void initView() {
            
            findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    et_URL = (EditText) findViewById(R.id.et_URL);
                    URL = et_URL.getText().toString();
                    new Thread(){
                        public void run() {
                            toService();
                        };
                    }.start();
                }
            });
    
        }
        public void toService() {
            soap = new SoapObject(namepace, methodName);
            sse = new SoapSerializationEnvelope(SoapEnvelope.VER10);
            sse.bodyOut = soap;
            sse.dotNet = true;
            HttpTransportSE htse = new HttpTransportSE(URL);
            try {
                htse.call(namepace + methodName, sse);
                soapResponse = (SoapObject) sse.bodyIn;
                result = soapResponse.getProperty(0).toString();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                e.printStackTrace();
            }
            Message msg = new Message();
            msg.obj = result;
            handler.sendMessage(msg);
        }
    }
  • 相关阅读:
    Linux查找日志技巧
    win10编辑hosts文件提示没有权限
    Viso 2019 下载与激活
    SpringBoot日志记录组件logback的配置解释
    webservice(axis)接口上传文件附件 及 用zlib解压缩
    axis2添加接口过程
    关于“finally block does not complete normally”警告提示
    webservice介绍与流程(杂)
    JDBC理解
    Myeclipse中调整xml中字体显示大小
  • 原文地址:https://www.cnblogs.com/LandMine/p/4452907.html
Copyright © 2020-2023  润新知