2012-07-16 44 views
1

我试图运行一个消费Web服务的Android应用程序的简单示例。下面的一些例子在web我终于做到了这一点:从模拟器消耗Android的Android

private String getValueFromWS() 
{ 
    try 
    { 
     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

     String weight = "3700"; 
     String fromUnit = "Grams"; 
     String toUnit = "Kilograms"; 

     PropertyInfo weightProp =new PropertyInfo(); 
     weightProp.setName("Weight"); 
     weightProp.setValue(weight); 
     weightProp.setType(double.class); 
     request.addProperty(weightProp); 

     PropertyInfo fromProp =new PropertyInfo(); 
     fromProp.setName("FromUnit"); 
     fromProp.setValue(fromUnit); 
     fromProp.setType(String.class); 
     request.addProperty(fromProp); 

     PropertyInfo toProp =new PropertyInfo(); 
     toProp.setName("ToUnit"); 
     toProp.setValue(toUnit); 
     toProp.setType(String.class); 
     request.addProperty(toProp); 

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

     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapPrimitive response = (SoapPrimitive)envelope.getResponse(); 

     return response.toString(); 
    } 
    catch (Exception e) 
    { 
     return "Error: " + e.getMessage(); 
    } 
} 

我也该清单文件中添加的

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

我不知道为什么它在

androidHttpTransport.call(SOAP_ACTION, envelope); 

抛出一个异常,当它运行蒙山模拟器。我使用的是2.5S的kSoap版本,模拟器运行的是Android 4.1(16级)。

我做错了什么?

+0

请提供您所看到的例外。也看看这个链接http://stackoverflow.com/questions/9355707/how-to-create-soap-request-via-ksoap2,因为它可能对你有所帮助。 – BrianPlummer 2012-07-16 17:38:39

+0

这是一个NetWorkOnMainThreadException。详细消息=空。没有太多的信息,对不起。 – nachovall 2012-07-17 18:00:49

回答

2

对不起,由于您在主用户界面线程上执行网络调用,因此发生异常。尝试在AsyncTask的doInBackground()方法中执行调用以将调用从主线程卸载。另一种解决此问题的方法是更改​​JellyBean(4.x)仿真器上默认启用的严格模式。你也可以在旧版本的sdk/emulator(2.3.x)上试试你的代码,以使其工作。

这解释了错误:

http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

+0

完美。现在它可以工作。此外,不要使用主线程进行WS调用是一种很好的做法。与用户进行更为有效的交互。非常感谢。 – nachovall 2012-07-27 10:07:55