Android访问webservice

这篇博客主要介绍了Android开发中访问WebService的方法,包括使用Ksoap2和HttpUrlConnection的详细步骤。提供了相关工具类和资源下载链接,以及一篇讲解较好的参考文章。
摘要由CSDN通过智能技术生成

Android开发中很多时候要用到webservice,这样可以方便的访问网络资源,这里提供几个网站:

阿里巴巴的FastJson介绍:http://code.alibabatech.com/wiki/display/FastJSON/Home

适合手机的WebService的SDK:Ksoap2:https://code.google.com/archive/p/ksoap2-android/wikis/HowToUse.wiki

获取WebService:http://www.webxml.com.cn/zh_cn/web_services.aspx


这里测试使用天气接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx

一、使用Ksoap2:

工具类:WebServiceUtils.java(这个工具类以后就可以直接拿来使用了)

package com.mfc.UrlUtils;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

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.Handler;
import android.os.Message;

/*
 * 访问WebService的工具类
 * 2017年8月10日13:05:29
 * */
public class WebServiceUtils {
	//webservice路径
	public static final String WEB_SERVICE_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx";
	//命名空间
	//这个命名空间:找到webservice的网页,点击WSDL就会看到xml,里面有一个
	//<wsdl:definitions targetNamespace="http://WebXml.com.cn/">
	//就是这个命名空间
	private static final String NAMESPACE = "http://WebXml.com.cn/";

	//含有三个线程的线程池
	private static final ExecutorService executorService = Executors.newFixedThreadPool(3);

	/**
	 *
	 * @param url
	 *            WebService服务器地址
	 * @param methodName
	 *            WebService的调用方法名
	 * @param properties
	 *            WebService的参数
	 * @param webServiceCallBack
	 *            回调接口
	 */
	public static void callWebSerVice(String url, final String methodName,
									  HashMap<String, String> properties,
									  final WebServiceCallBack webServiceCallBack) {
		// 创建HttpTransportSE对象,传递WebService服务器地址
		final HttpTransportSE httpTransportSE = new HttpTransportSE(url);
		// 创建SoapObject对象
		SoapObject soapObject = new SoapObject(NAMESPACE, methodName);
		//soapObject添加参数,这里通过传过来一个HashMap来设置参数
		if(properties != null){
			Iterator<Map.Entry<String, String>> it = properties.entrySet().iterator();
			while(it.hasNext()){
				Map.Entry<String, String> entry = it.next();
				soapObject.addProperty(entry.getKey(),entry.getValue());
			}
		}
		//实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号
		final SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		//设置是否调用的是.Net开发的WebService
		soapEnvelope.setOutputSoapObject(soapObject);
		soapEnvelope.dotNet = true;
		httpTransportSE.debug = true;

		//用于子线程与主线程通信的Handler
		final Handler handler = new Handler(){
			@Override
			public void handleMessage(Message msg) {
				super.handleMessage(msg);
				//将返回值回调到callBack的参数中
				webServiceCallBack.callBack((SoapObject)msg.obj);
			}
		};

		//开启线程访问WebService
		executorService.submit(new Runnable() {

			@Override
			public void run() {
				SoapObject resultSoapObject = null;
				try {
					httpTransportSE.call(NAMESPACE+methodName, soapEnvelope);
					if(soapEnvelope.getResponse() != null){
						//获取服务器响应返回的SoapObject
						resultSoapObject = (SoapObject) soapEnvelope.bodyIn;
					}
				} catch (IOException e) {
					e.printStackTrace();
				} catch (XmlPullParserException e) {
					e.printStackTrace();
				} finally {
					//将获取的消息利用handler发送到主线程
					handler.sendMessage(handler.obtainMessage(0, resultSoapObject));
				}

			}
		});


	}

	public interface WebServiceCallBack {
		public void callBack(SoapObject result);
	}
}

获取省份的activity:

package com.example.administrator.webserviceandh
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值