Android使用ksoap2包访问webservice接口

Android本身没有集成访问webservice的相关api,需要我们引用第三方的包,现在一般用的是ksoap2.jar这个包,大小不足200K,非常轻量级,点击此处下载jar包。使用时将jar包放进android项目的libs文件中即可。 下面是使用ksoap2获取电话号码地区的一个简单例子:

package com.yeetrack.mynumberquery;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * @author youthflies
 * 使用ksoap2 访问webservice 获取手机号码地区
 */

public class MainActivity extends Activity
{

    private EditText inputText;
    private Button submitButton;
    private TextView resultView;
    private String phoneCode;

    private Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
            Bundle bundle = msg.getData();
            String result = bundle.getString("result");
            if(result != null)
                resultView.setText(result);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        inputText = (EditText)findViewById(R.id.numInputId);
        submitButton = (Button)findViewById(R.id.queryButtonId);
        resultView = (TextView)findViewById(R.id.resultId);

        OnClickListener onClickListener = new OnClickListener()
        {

            @Override
            public void onClick(View v)
            {
                switch(v.getId())
                {
                case R.id.queryButtonId:
                    phoneCode = inputText.getText().toString().trim();
                    //简单过滤一下
                    if(!phoneCode.matches("\\d{11}"))
                        Toast.makeText(MainActivity.this, "电话格式不对", Toast.LENGTH_LONG).show();
                    else    
                    {
                        resultView.setText("加载中...");
                        new Thread(runnable).start();
                    }
                    break;
                }

            }
        };

        submitButton.setOnClickListener(onClickListener);

    }

    //android主线程中现在不允许有阻塞动作存在,耗费时间的请求要放在子线程中
    Runnable runnable = new Runnable()
    {

        @Override
        public void run()
        {
            String namespace = "http://WebXml.com.cn/";
            String methodName = "getMobileCodeInfo";
            String endPoint = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx";
            String soapAcion = "http://WebXml.com.cn/getMobileCodeInfo";

            //指定webservice的命名空间和调用的方法
            SoapObject soapObject = new SoapObject(namespace, methodName);
            //添加需要的参数
            soapObject.addProperty("mobileCode", phoneCode);
            soapObject.addProperty("userID", "");

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

            envelope.setOutputSoapObject(soapObject);

            envelope.dotNet = true;

            //HttpTransportSE A J2SE based HttpTransport layer. 
            HttpTransportSE transportSE = new HttpTransportSE(endPoint);

            try
            {
                transportSE.call(soapAcion, envelope);
            } catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (XmlPullParserException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            //读取结果
            SoapObject object = (SoapObject)envelope.bodyIn;
            String result = object.getProperty(0).toString();

            Message msg = new Message();

            Bundle bundle = new Bundle();
            bundle.putString("result", result);
            msg.setData(bundle);
            handler.sendMessage(msg);   
        }
    };

}
版权声明

本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。

© 空空博客,本文链接:https://www.yeetrack.com/?p=662