2016-01-27 73 views
-1

實際上,我使用的WebService從W3School測試,我有這樣的方法:Android:如何使用kso​​ap2-android?

public static float getCelsius(int Fahrenheit) 
{ 
    String SOAP_ACTION = "http://www.w3schools.com/xml/FahrenheitToCelsius"; 
    String METHOD_NAME = "FahrenheitToCelsius"; 
    String NAMESPACE = "http://www.w3schools.com/xml/"; 
    String URL = "http://www.w3schools.com/xml/tempconvert.asmx"; 

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
    request.addProperty("Fahrenheit", Fahrenheit); 

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
    envelope.dotNet = true; 
    envelope.setOutputSoapObject(request); 

    try { 
     HttpTransportSE transport = new HttpTransportSE(URL); 
     transport.call(SOAP_ACTION, envelope); 

     SoapPrimitive result = (SoapPrimitive)envelope.getResponse(); 
     return Float.parseFloat(result.toString()); 

    } catch(Exception e) { 
     return 0; 
    } 
} 

但它不工作,總是返回0 我設置了互聯網許可,不得以AndroidManifest.xml這樣的:

<uses-permission android:name="android.permission.INTERNET" /> 

我使用AVD模擬器,但我也嘗試在我的平板電腦上運行應用程序:沒有工作。

任何幫助? 對不起,英文不好,我希望你能理解。

回答

0
 public static float getCelsius(int Fahrenheit) { 
    String Result = null; 
    try { 
    String SOAP_ACTION = "http://www.w3schools.com/xml/FahrenheitToCelsius"; 
     String METHOD_NAME = "FahrenheitToCelsius"; 
    String NAMESPACE = "http://www.w3schools.com/xml/"; 
     String URL = "http://www.w3schools.com/xml/tempconvert.asmx"; 
     SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME); 
     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 
     request.addProperty("Fahrenheit", Fahrenheit); 

     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 
     try { 
      androidHttpTransport.call(NAMESPACE+ "FahrenheitToCelsius", envelope); 
     } catch (IOException | XmlPullParserException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     SoapPrimitive response; 

     try 
     { 
      response = (SoapPrimitive) envelope.getResponse(); 
      Result = response.toString(); 
     } 
     catch (Exception e) 
     { 
     // Helper.warning("Error","Error 2"+e.toString(), this); 
     } 
    } 
    catch (Exception er) { 
     // Helper.warning("Error","Error 2"+er.toString(), this); 
    } 
    return Float.parseFloat(Result); 
} 

試試上面的代碼。

1

這裏的解決方案:

您不能運行在主線程的代碼,你必須創建另一個線程這樣的:

Thread thread = new Thread() { 
    @Override 
    public void run() { 
     String SOAP_ACTION = "http://www.w3schools.com/xml/FahrenheitToCelsius"; 
     String METHOD_NAME = "FahrenheitToCelsius"; 
     String NAMESPACE = "http://www.w3schools.com/xml/"; 
     String URL = "http://www.w3schools.com/xml/tempconvert.asmx"; 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("Fahrenheit", "10"); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(request); 

     try { 
      HttpTransportSE transport = new HttpTransportSE(URL); 
      transport.call(SOAP_ACTION, envelope); 
      SoapPrimitive result = (SoapPrimitive) envelope.getResponse(); 
     } catch (Exception e) { 
      Log.e("TESTS", "KSOAP2", e); 
     } 
    } 
}; 
thread.start(); 

無論如何,感謝您的答案。

相關問題