2015-07-21 99 views
0

我是新手。 我試圖從Android Studio調用Argos Web服務。Android Studio使用kso​​ap調用Argos WebService庫錯誤

的網址:http://ws-argos.cls.fr/argosDws/services/DixService?wsdl

但是,當我要調用的函數,我就扔了XML

<soap:Envelope 
xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:typ="http://service.dataxmldistribution.argos.cls.fr/types"> 
    <soap:Body> 
    <typ:xmlRequest> 
    <typ:username>*****</typ:username> 
    <typ:password>*****</typ:password> 
    <typ:platformId>149343</typ:platformId> 
    <typ:nbDaysFromNow>10</typ:nbDaysFromNow> 
    </typ:xmlRequest> 
</soap:Body> 
</soap:Envelope> 

http://ws-argos.cls.fr/argosDws/services/DixService?getXml獲得Web服務的響應。 我不知道爲什麼,但我會得到的Web服務架構,而不是響應的,如果我扔了XML來http://ws-argos.cls.fr/argosDws/services/DixService?wsdl

在我的Android Studio中,我的代碼將

private static final String SOAP_ACTION = "getXml"; 
    private static final String NAMESPACE = "http://service.dataxmldistribution.argos.cls.fr/types"; 
    private static final String MAIN_REQUEST_URL = "http://ws-argos.cls.fr/argosDws/services/DixService?wsdl"; 

public String getXml(String username, String password, String PlatformId, String nbDaysFromNow) { 
     String data = null; 
     String methodname = "xmlRequest"; 

     SoapObject request = new SoapObject(NAMESPACE, methodname); 
     request.addProperty("username", username); 
     request.addProperty("password", password); 
     request.addProperty("platformId", PlatformId); 
     request.addProperty("nbDaysFromNow", nbDaysFromNow); 

     SoapSerializationEnvelope envelope = getSoapSerializationEnvelope(request); 

     HttpTransportSE ht = getHttpTransportSE(); 
     try { 
      ht.call(SOAP_ACTION, envelope); 
      SoapPrimitive resultsString = (SoapPrimitive)envelope.getResponse(); 

      data = resultsString.toString(); 

     } catch (SocketTimeoutException t) { 
      t.printStackTrace(); 
     } catch (IOException i) { 
      i.printStackTrace(); 
     } catch (Exception q) { 
      q.printStackTrace(); 
     } 
     return data; 
    } 

    private final SoapSerializationEnvelope getSoapSerializationEnvelope(SoapObject request) { 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.implicitTypes = true; 
     envelope.setAddAdornments(false); 
     envelope.setOutputSoapObject(request); 

     return envelope; 
    } 

    private final HttpTransportSE getHttpTransportSE() { 
     HttpTransportSE ht = new HttpTransportSE(Proxy.NO_PROXY,MAIN_REQUEST_URL,60000); 
     ht.debug = true; 
     return ht; 
    } 

但我始終在ht.call上得到錯誤(SOAP_ACTION,envelope);

07-22 14:02:43.562 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ android.os.NetworkOnMainThreadException 
07-22 14:02:43.562 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1147) 
07-22 14:02:43.562 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:418) 
07-22 14:02:43.562 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
07-22 14:02:43.562 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at java.net.InetAddress.getAllByName(InetAddress.java:215) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.HostResolver$1.getAllByName(HostResolver.java:29) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:232) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:124) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:272) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:382) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:106) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at com.android.okhttp.internal.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:217) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:126) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:185) 
07-22 14:02:43.563 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118) 
07-22 14:02:43.564 2846-2846/com.ecocean.ecoceansharkrace W/System.err﹕ at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113) 

名稱空間,主url,soap_action和方法名已經正確嗎? 對不起,我的英語。我不是英國人。

回答

1

通過添加

if (android.os.Build.VERSION.SDK_INT > 9) { 
      StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
      StrictMode.setThreadPolicy(policy); 
     } 

另一替代完成正在使用的AsyncTask

0

你應該嘗試傳遞參數如下面

字符串方法名= 「典型值:xmlRequest」;

SoapObject request = new SoapObject(NAMESPACE, methodname); 
    request.addProperty("typ:username", username); 
    request.addProperty("typ:password", password); 
    request.addProperty("typ:platformId", PlatformId); 
    request.addProperty("typ:nbDaysFromNow", nbDaysFromNow); 
相關問題