2016-01-27 74 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(); 

无论如何,感谢您的答案。

相关问题