1.写作背景:

  笔者想实现android调用webservice,可是网上全是不管对与错乱转载的文章,结果不但不能解决问题,只会让人心烦,所以笔者决定将自己整理好的能用的android调用webservice的实现分享给大家,供以后遇到相同需求的人能少走弯路。

  源码使用android studio编写,可以在github上面下载观看:https://github.com/jhscpang/TestWebSwervice。

 

2.具体实现:

  本文的重点是android怎么调用webservice而不是用哪个webservice,所以这里就用网上传的比较多的计算来电归属地的webservice进行测试。这个webservice地址为:http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl。

用浏览器访问这个网址可以看到如下界面:android调用Webservice方法_第1张图片

图中被圈起来的部分1说明soap版本为12, 被圈起来的部分2说明了namespace地址,这两个值稍后在代码中能用到。

图中被圈起来的部分说明了调用的方法的名字,里面的说明文档告诉了输入参数和返回值等信息,这些信息稍后代码中也会用到。

 

  下面写请求webservice的方法,代码如下, 具体每句的解释有备注:

 

/**     * 手机号段归属地查询     *     * @param phoneSec 手机号段     */    public String getRemoteInfo(String phoneSec) throws Exception{        String WSDL_URI = "http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?WSDL";//wsdl 的uri        String namespace = "http://WebXml.com.cn/";//namespace        String methodName = "getMobileCodeInfo";//要调用的方法名称        SoapObject request = new SoapObject(namespace, methodName);        // 设置需调用WebService接口需要传入的两个参数mobileCode、userId        request.addProperty("mobileCode", phoneSec);        request.addProperty("userId", "");        //创建SoapSerializationEnvelope 对象,同时指定soap版本号(之前在wsdl中看到的)        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER12);        envelope.bodyOut = request;//由于是发送请求,所以是设置bodyOut        envelope.dotNet = true;//由于是.net开发的webservice,所以这里要设置为true        HttpTransportSE httpTransportSE = new HttpTransportSE(WSDL_URI);        httpTransportSE.call(null, envelope);//调用        // 获取返回的数据        SoapObject object = (SoapObject) envelope.bodyIn;        // 获取返回的结果        result = object.getProperty(0).toString();        Log.d("debug",result);        return result;    }

 

  因为调用webservice属于联网操作,因此不能再UI线程中执行访问webservice,为了便于将结果反馈给UI线程,采用AsyncTask线程,代码如下:

 

 class QueryAddressTask extends AsyncTask {        @Override        protected String doInBackground(String... params) {            // 查询手机号码(段)信息*/            try {                result = getRemoteInfo(params[0]);            } catch (Exception e) {                e.printStackTrace();            }            //将结果返回给onPostExecute方法            return result;        }        @Override        //此方法可以在主线程改变UI        protected void onPostExecute(String result) {            // 将WebService返回的结果显示在TextView中            resultView.setText(result);        }    }

 

  然后在主线程中给用户设置使用该功能的方法,代码如下:

 

private EditText phoneSecEditText;    private TextView resultView;    private Button queryButton;    private String result;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        phoneSecEditText = (EditText) findViewById(R.id.phone_sec);        resultView = (TextView) findViewById(R.id.result_text);        queryButton = (Button) findViewById(R.id.query_btn);        queryButton.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // 手机号码(段)                String phoneSec = phoneSecEditText.getText().toString().trim();                // 简单判断用户输入的手机号码(段)是否合法                if ("".equals(phoneSec) || phoneSec.length() < 7) {                    // 给出错误提示                    phoneSecEditText.setError("您输入的手机号码(段)有误!");                    phoneSecEditText.requestFocus();                    // 将显示查询结果的TextView清空                    resultView.setText("");                    return;                }                //启动后台异步线程进行连接webService操作,并且根据返回结果在主线程中改变UI                QueryAddressTask queryAddressTask = new QueryAddressTask();                //启动后台任务                queryAddressTask.execute(phoneSec);            }        });    }

 

  布局文件如下:

 

<?xml version="1.0" encoding="utf-8"?>            

 

  AndroidManifest文件如下:

 

<?xml version="1.0" encoding="utf-8"?>                                                                                    

 

  运行效果如下图:

android调用Webservice方法_第2张图片

更多相关文章

  1. Android 文件读写操作方法总结
  2. 低版本android project在高版本ADK中运行方法
  3. Android中应用界面主题Theme使用方法和页面定时跳转应用
  4. G1安装android软件方法 (实机运行)
  5. android设置主题和自定义主题的方法
  6. android intent使用方法
  7. Android webkit webkit中skia的使用方法简析
  8. android(java)对网络状态(socket)判断的方法
  9. 安装Android Studio遇到中文乱码的解决方法

随机推荐

  1. 漫画褶皱该怎么画?动漫衣服的褶皱画法
  2. iOS导航栏控制的一些总结
  3. C++11的右值引用的具体使用
  4. PHP中token的生成案例
  5. JS 基础-入门实例(变量、常量、函数、作
  6. Linux内核设备驱动之Linux内核基础笔记整
  7. 媒体查询,大屏适配,定位及flex布局
  8. 伪类/盒子模型及单位
  9. 使用 Swoole 加速你的 CMS 系统
  10. JS中变量与作用域