關於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).


謝謝你能看到。



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