关于android,ksoap方面的webservice调用的一些问题

本人也是刚刚接触android这块的,使用ksoap,服务器是.net的写的webservice,来回搞了两天才搞好,常见的问题大家一起注意一下。

首先,关于参数这块在这个文章里面写的请清楚,什么是名字空间,方法名等等.

http://www.2cto.com/kf/201605/504915.html。按这里的参数填就不会错了。

这里面有一个问题是一直我没搞清楚的,因为我是在内网中调试的,名字空间写webservice的时候直接写成了内网的IP地址。

用get,或post都没有问题,包括我还用soapUI去测试都没有问题。

(另外说一下soapUI这是一个挺好用的工具,如果对于名字空间方法名URL里面都可以查得到。)

正确的名字空间是网址的形式:http://baidu.com/或http://www.baidu.com.

结果……你懂得,搞了一天,汗死了,一定要用网址的形式,关于名字空间的修改方法,是在写webservice服务的时候改的,问写后台的同事,让他们改吧。

如果是.net写的是在WebService.cs文件里面第一行代码。  [WebService(Namespace = "http://baidu.com/")]

如果你也跟我写得一样写成了IP地址形式的名字空间时,ksoap调用时出现的错误是:没有有效的操作参数,无法处理请求。请提供有效的 SOAP 操作。(好大的坑)

也就是说,如果这种错误是因为没有连接到web服务器或找不到web服务器上的服务,问题出在连接参数上面。soapAction这个参数千万别填错。(

HttpTransportSE.call("http://baidu.com/方法名", envelope);

另外关于webservice的版本要注意一下:

public SoapEnvelope(int version) {
    this.version = version;
    if(version == 100) {
        this.xsi = "http://www.w3.org/1999/XMLSchema-instance";
        this.xsd = "http://www.w3.org/1999/XMLSchema";
    } else {
        this.xsi = "http://www.w3.org/2001/XMLSchema-instance";
        this.xsd = "http://www.w3.org/2001/XMLSchema";
    }

    if(version < 120) {
        this.enc = "http://schemas.xmlsoap.org/soap/encoding/";
        this.env = "http://schemas.xmlsoap.org/soap/envelope/";
    } else {
        this.enc = "http://www.w3.org/2003/05/soap-encoding";
        this.env = "http://www.w3.org/2003/05/soap-envelope";
    }

这是soap包里面的参数,可以看到,不同的版本,包对应的很多参数是不一样的,要注意一下。(可以都试一下,也就两个包)


如果连接正常的话,有可能还会遇到一个:

FATAL EXCEPTION: AsyncTask #1 

java.lang.RuntimeException: An error occured while executing doInBackground()

这个错误因为我是做了线程,出现这个错误有两个原因,一是调用UI,子线程不能动UI你懂得,

另外其他的原因可能是结果集的序列化方式不对也会出现这个错误。一般你在出现错误的第一行后,接着往下看几行就有提式了比如:

 at java.lang.Thread.run(Thread.java:856)

 Caused by: java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive cannot be cast to org.ksoap2.serialization.SoapObjec:(序列化转换时出错)

 at Class.NetAsyncTask.doInBackground(NetAsyncTask.java:75).


谢谢你能看到。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章