android webservices使用教程及遇到问题总结


2015/09/09重新整理

之前的项目中使用ksoap过程中偶尔会出现首次调用webservices接口无法返回数据,根据实际的测试发现,服务端的webservices接口根本没收到任何数据请求。

soapResult直接发回null

具体的报错信息:

1、

E/SaveMedia-response(4393): java.net.SocketException: sendto failed: EPIPE (Broken pipe)
2、ndroid]java.net.SocketException: sendto 失败: EPIPE (断管) 同时发送 byte]
解决方案来自物联网,不拉不拉与本站无关(你懂得)
方案一说:
有序列 MediaAvidance 在 android 通过实施 KvmSerializable 但为了让它工作您服务器端 MediaAvidance 还必须序列化。 有这样做方案解决的代码下面我 Cannot Serialize 我得到了的异常:
   [Serializable]
   public class MediaAvidance

您还需要注册您 SoapSerializationEnvelope 到 MarshalBase64 :

   envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
   new MarshalBase64().register(envelope); 
方案2说:
jar包有bug,无论你使用的哪个版本的jar包替换成ksoap2-android-assembly-2.6.5-jar-with-dependencies.jar(亲测好使!!)
下载地址点击打开链接
http://download.csdn.net/detail/sfq19881224/9093341

其中的参数及方法介绍请看这两篇文章,本文章所要说的是除了其他文章中说的意外,需要注意的地方,还有一写文章中虽然介绍了,但是博主自己无法测试通过情况的解决方案

 简单粗暴直接上例子:

	    public String getRemoteInfo(String phoneSec) {
		
		String nameSpace = "http://webservices.news.test.com/";//这个是本人内网测试的
		
                //没参数的方法没意思,直接注掉
		//String methodName = "test";
                //假设这是有参数的方法
		String methodName = "getNewsInfoListBy";
		
		// EndPoint,后缀直接加上?wsdl就可以在浏览器中查看接口及方法和参数(方法参数请务必严格按照顺序和类型传)
		String endPoint = "http://10.1.40.32:8080/DhccEHR/cxf/NewsWebservices";//url去掉?wsdlAddBookWebservices

		
		// SOAP Action不要问为什么,反正这个地用不到,参考的博客中有用到soapAction,wsdl中无法看到他的直接存在,但是可以通过
                //namespace+methodName组合起来</span>

		String soapAction = "http://webservices.addressbook.hrm.dhcc.com/getCompanyAddressBookList";//namespace+methodName
	    	
	        String methodName = "getMobileCodeInfo"; 
        
		SoapObject rpc = new SoapObject(nameSpace, methodName);

                //注意 参数就是这样传的!!!
		rpc.addProperty("user_name", "老刘");
		rpc.addProperty("dept_name", "产品部");
		
		//SoapEnvelope.VER10这个版本号一定要跟你自己的时机版本对应起来</span>
		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

		envelope.bodyOut = rpc;
               //是不是.net相信你自己比较清楚哈
		envelope.dotNet = false;
		envelope.setOutputSoapObject(rpc);

		HttpTransportSE transport = new HttpTransportSE(endPoint);
		try {
			//搞了很久,为什么第一个参数要为空!!!说好的命名空间+方法名呢?????????
                        //这里是与参考的博客不一样的地方
			//不为空就报类型转换错误
			transport.call("", envelope);
		} catch (Exception e) {
			e.printStackTrace();
		}
		String result= null;
		if (envelope.bodyIn instanceof SoapFault)
		{
		    SoapFault sf = (SoapFault) envelope.bodyIn;
		    result = String.valueOf(sf);
		    Log.v("TTTT","sfq--->>>>>"+result);
		}else{
			SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;
			//这个地方很重要,不要以为拿到resultrequestSOP就完成任务了,你可以打印字符串观察下,返回的数据开头往往会带哟偶”return =“是不标准                        //的json,为实现获取标准的Json数据,需要添加下边这一句
			Object ob = (SoapObject)resultsRequestSOAP.getProperty(0);
			Log.v("TTTT","sfq--->>>>>:"+String.valueOf(resultsRequestSOAP));
			result = String.valueOf(resultsRequestSOAP);
			
		}
		    return result;
		    
	}

好了以上只是一个测试方法吗,需要引入android ksoap的jar包,如何下载和加载jar包可以直接参考两篇博客
参考文献列一
1、 http://blog.csdn.net/lyq8479/article/details/6428288
2 、 http://blog.csdn.net/lyq8479/article/details/6420398
稍后上传测试demo,只是一个测试demo,仅仅拿到数据就是我的主要目的!!
下载 地址 http://download.csdn.net/detail/sfq19881224/8804783



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值