使用的手机为小米2s,最近升级了系统,Android版本为5.0.2,使用ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar这个jar包来访问webservice。之前运行没有问题的程序在这一句报了E/AndroidRuntime(1071): java.lang.ClassCastException: org.ksoap2.SoapFault cannot be cast to org.ksoap2.serialization.SoapObject异常。
SoapObject detail = (SoapObject) envelope.bodyIn;
原因是因为连接webservice失败,所以传回的对象不是SoapObject而是SoapFault,当然会类型转换失败,所以在这句无论怎么类型转换和异常处理都是治标不治本。
在我的项目中,最终的解决方法是把ksoap2-android-assembly-3.0.0-jar-with-dependencies.jar使用jarjar.jar工具将里面的包名进行重命名,可能原因是新的系统里面已经集成了这个jar包,造成了某种冲突吧(没深入去研究^_^)。总之在我的机器上,重命名jar包的包名可以解决此异常。
jarjar.jar工具使用说明:
新建rules.txt,内容为
rule org.ksoap2.** org.myksoap2.@1
就是将所有的org.koap2改成org.myksoap2,可以自己起新的包名。
将rules.txt、jarjar.jar、ksoap2-android-assembly-3.