Android通过Ksoap连接webservice

本人刚刚大三结束,进入了实习阶段,目前在深圳,我所从事的工作是关于Android开发,我从2011年自学Android至今,积累了一定的项目开发经验,我要把我在Android世界的点点滴滴都与大家分享,这是我在csdn的第一篇博客,希望大家支持。

凡事从事Android开发的人员,都离不开与服务器的交互,在Android交互中大概分为以下几种方式,

第一种就是直接与服务器的数据库打交道,也就是说和服务器一样,直接操作数据库,但是这种操作方式的缺点就是不安全,以及不方便,所以这种方式目前不被大家所用;

第二种是通过webservice与服务器交互,通过webservice与服务器交互一般都要用到http的相关协议,例如TCP/IP等,在这里可以有以下两种操作方式,第一种就是原生开发,所谓的原生开发就是利用java最原始的方式与webservice交互,其优点是自我控制比较方便,便于修改,但是代码量大,难以实现,容易出错也是其致命的缺点;第二种方式就是通过第三方开发包进行开发,因为开发包都是集成好的,所以开发起来比较方便,可以很容易上手。

废话不多说,直接上代码。

     String serviceURL = "http://192.168.1.59/WebService/AndroidWebService.asmx"; //要请求的webservice服务器地址
     String methodName = "getUserName";//方法名称
     SoapObject request = new SoapObject(serviceURL,methodName);
     request.addProperty("userid",username.getText().toString());//传参
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
     envelope.dotNet = true;//如果你的服务器是.NET做的就请加上这一行,否则不需要
     envelope.bodyOut = request;
     HttpTransportSE ht = new HttpTransportSE(serviceURL); //创建HttpTransportSE对象
     try{
      ht.call(null, envelope);//请求连接服务器
      if(envelope.getResponse()!=null){
       String result = envelope.getResponse().toString();
       //如果上面的代码不能用就用Object object = envelope.getResponse();这一行代码代替上面的代码,我是用的下面的,上面的我用不了,但是网上很多都是上面的
       username.setText(result);//这里面的username是自己定义的一个TextView控件
      }
     } catch(Exception e){ 
      e.printStackTrace();
     }
上面的代码是请求webservice并返回一个值的方法,也是网上的方法,但是我建议大家把它封装到一个方法里,然后再进行调用,这样的话更利于后期调用和代码优化,具体的实现如下:

public class LinkWebservice {
	private String methodName;
	private String strData;
	private String strCode;
	private String resultStr;
	private String rst;
	public String LinkWebservice(String methodName,String strData,String strCode){
		String serviceUrl = "http://192.168.1.59/WebService/AndroidWebService.asmx";
		this.methodName = methodName;
		this.strData = strData;
		this.strCode = strCode;
		SoapObject request = new SoapObject("http://tempuri.org/",methodName);
		packages pgs = new packages();
		resultStr = pgs.Packages(strCode, strData);
		request.addProperty("strData",resultStr);
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
		envelope.dotNet = true;
		envelope.bodyOut = request;
		HttpTransportSE ht = new HttpTransportSE(serviceUrl);
		String rst2 = "";
		try{
			ht.call("http://tempuri.org/GetData", envelope);
			if(envelope.getResponse() != null){
				Object object = envelope.getResponse();
				UnPackages ups = new UnPackages();
				String rsts = object.toString();
				rst2 = ups.UnPackages(rsts);
			

			
			}
		}
			catch(Exception e){
				System.out.println("连接服务器失败");
		}
		return rst2;
	}
}

上面的代码也是我在项目中用的代码,其中packages是我自己封装的加密方法,大家可以用别的方法代替,我的目的是加密,你们也可以换成其他的,或者直接去掉。

如此一来,在Android端只需要调用方法即可返回服务器的信息,代码如下:

LinkWebservice links = new LinkWebservice();
links.LinkWebservice("GetData", StrData, "3000");

这里的StrData是我上面返回的数据,这个大家不用关心,你们想返回什么都可以,这三个就是我打包的方法里需要接受的参数,也就是

public String LinkWebservice(String methodName,String strData,String strCode)

这里的参数,最后返回一个字符串。

(补充:在用ksoap连接webservice之前需要把其jar包导入进去,我的是ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值