Android上访问Java做的WebService获取JSON数据的方法及org.xmlpull.v1.XmlPullParserException异常处理
来源:互联网 发布:java企业开发平台 编辑:程序博客网 时间:2024/04/30 03:49
这两天在进行一个DEMO 的编写时发现服务端的接口是基于java的WebService。之前我对于WebService没有任何接触,所以一切重头学习。
目前Android上对于Webservice的访问基本上都是通过ksoap2-android这个第三方库来实现的。但是关于这个库网上的绝大部分DEMO都是实现与.Net服务端交互,而没有提及与Java服务端的交互。本以为两者一样,但实际使用中就发现了不同,最基本的就是地址的不同.Net服务端的地址是以“.amsx”为结尾,而java服务端的地址是以“?wsdl”结尾。由于这个差异就导致了我使用DEMO中的代码访问java服务端时出现了错误。(由于刚接触WebService,这里可能会有理解错误,欢迎指正。)
但后来通过百度和谷歌找了大量文章后,发现其实ksoap2-android也是支持访问java的Webservice服务端的,只需要在原有DEMO的基础做些小的修改便能够访问,获取得到JSON数据。下面废话不多说贴上代码。
public void getGetMsg( final String id) { String methoName= "list";//方法名 String url="http://localhost:8800/Demo/services/MsgService" ;//访问地址 SoapObject soapObject= new SoapObject(null, methoName);//如果没有namespace,可以为null,有namespace可以填写,影响不大 SoapSerializationEnvelope envelope= newSoapSerializationEnvelope(SoapEnvelope.VER10);//设置版本号 soapObject.addProperty( "id",id);//传入的参数,没有参数则可忽略 envelope. dotNet= false;//由于我们是要访问java端的所以这里设置为false envelope.setOutputSoapObject(soapObject); HttpTransportSE httpTranstation= new HttpTransportSE(url); try { httpTranstation.call( null, envelope);//如果没有namespace,可以为null,有namespace可以填写为namespace+methoName,两种情况亲测无差别都能正常获取数据 Object result=envelope.getResponse(); String str=(String) result.toString(); //获得请求的字符串 Bundle bundle = new Bundle(); bundle.putString( "result", str); Message msg = new Message(); msg.setData(bundle); mHandler.sendMessage(msg);//将获取得到的JSON字符串交给handler进行进一步处理 } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } }
1、<uses-permission android:name="android.permission.INTERNET" />权限没有添加
2、代码中
SoapSerializationEnvelope envelope= newSoapSerializationEnvelope(SoapEnvelope.VER10);//设置版本号
设置的版本号大于服务端版本号,须改为小于或等于服务端的版本号
3、代码中String url="http://localhost:8800/Demo/services/MsgService" ;//访问地址
url地址不能写IP地址,只能写域名。
以上三个地方我都修改完成后,依旧会有“org.xmlpull.v1.XmlPullParserException”异常抛出,十分郁闷。但请记住,度娘没告诉你的,谷歌娘会告诉你。通过谷歌娘我找到了导致出现这个异常的第四个原因:一般来说我们访问的webService地址会以“.wsdl”或者“?wsdl”结尾但是请注意在上面的代码中我去掉了“wsdl”
String url="http://localhost:8800/Demo/services/MsgService" ;//访问地址
原因就是我要访问的服务端是使用xfire搭建的WebService,针对xfire,我们在写地址的时候需要把结尾的“.wsdl”或者“?wsdl”去掉,才能正常访问。
参考博客:http://lianxiangbus.iteye.com/blog/1430499
- Android上访问Java做的WebService获取JSON数据的方法及org.xmlpull.v1.XmlPullParserException异常处理
- 异常org.xmlpull.v1.XmlPullParserException
- org.xmlpull.v1.XmlPullParserException:异常
- android webservice ksoap 报错 org.xmlpull.v1.XmlPullParserException: expected: START_TAG 的解决办法
- android 调用webservice时出错org.xmlpull.v1.XmlPullParserException的解决办法
- android webservice ksoap 报错 org.xmlpull.v1.XmlPullParserException:解决方法
- android ksoap 报错 org.xmlpull.v1.XmlPullParserException: expected: START_TAG 的解决经验
- android ksoap 报错 org.xmlpull.v1.XmlPullParserException: expected: START_TAG 的解决经验
- android ksoap 报错 org.xmlpull.v1.XmlPullParserException: expected: START_TAG 的解决经验
- android解析XML文档遇到的问题(org.xmlpull.v1.XmlPullParserException)
- .NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
- .NoClassDefFoundError: org/xmlpull/v1/XmlPullParserException
- android 使用pull解析遇到异常问题at org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT ???@
- android解析xml一直报错org.xmlpull.v1.XmlPullParserException
- android org.xmlpull.v1.XmlPullParserException: Unexpected token (position:TEXT ???@
- android解析xml一直报错org.xmlpull.v1.XmlPullParserException
- org.xmlpull.v1.XmlPullParserException: expected: START_TAG
- org.xmlpull.v1.XmlPullParserException: precondition: START_TAG
- linux openssl 升级
- 网秦应就造假事件向股民道歉
- 群硕软件开发(上海)有限公司 怎么样?
- CoreGraphics之CGContext绘图 - iOS开发
- virtualbox中如何增加虚拟机ubuntu的硬盘
- Android上访问Java做的WebService获取JSON数据的方法及org.xmlpull.v1.XmlPullParserException异常处理
- boost的fusion篇之container
- Javascript事件简介+取消默认动作
- 第五周作业——有向图邻接表表示及反向图构造
- linux怎么挂载U盘
- ruby学习笔记(11)--symbol与hash参数
- jogamp第一课显示一个黑黑的窗口
- 腾讯、百度、阿里面试经验—(3)
- HQL分页查询