2013-02-17 63 views
0

我使用下面的代码从响应中获取值,但即时获取以下错误在主线程异常网络上,但是我确信url,名称空间,方法和肥皂行动是正确的,因为他们在浏览器中工作,我也解析SoapObject和soaSerializationEnvelope时出现错误,我该如何解决这个问题,或者如果我可以有一个简单的例子解析肥皂请求,并获得这将是优异的产品在android中获得肥皂响应的值,

公共无效测试(){

的TextView =(TextView的)findViewById(R.id.textView1);

SoapObject reSoapObject = new SoapObject(NAMESPACE, METHOD_NAME); 

    SoapSerializationEnvelope soaSerializationEnvelope = new SoapSerializationEnvelope(
      SoapEnvelope.VER11); 


    soaSerializationEnvelope.setOutputSoapObject(reSoapObject); 
    HttpTransportSE httpTransportSE = new HttpTransportSE(URL); 

    String ip = null; 

    try { 
     httpTransportSE.call(SOAP_ACTION, soaSerializationEnvelope); 
     SoapObject soapObjectResultRoot = (SoapObject) soaSerializationEnvelope.bodyIn; 

     Log.e(">>>>>>>>>>>>>>>>>>", "Root elemtn body: " 
       + soapObjectResultRoot.toString()); 

     SoapObject soapObjectGetProperty = (SoapObject) soapObjectResultRoot.getProperty("return"); 
     ip = soapObjectGetProperty.getProperty("return").toString(); 


    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (XmlPullParserException e) { 
     e.printStackTrace(); 
    } 

    textView.setText(" \nIP --> " + ip); 

} 
+0

我与完整的例子在这一个回答... 检查: http://stackoverflow.com/questions/6608701/android-how-to-pass-double-value-to-service-使用-KSOAP/11718868#11718868 – IamStalker 2013-02-17 14:07:29

回答

0

只是看了一遍很仔细的异常名,并尝试去了解它的意思:

Network on main thread exception 

这意味着你执行网络操作,其中,就像任何其他的IO操作,需要几毫秒在主线程(读取:UI线程)上处理等待硬件响应。

所以这意味着你阻止了UI线程,并使你的应用程序滞后,运行缓慢,没有人想要。

只需使用几种不同的线程方法之一即可。最常见的是AsyncTask,但如果您想进一步探索,您可以研究用于较低级别交互的线程,用一些漂亮的自动数据处理触摸来管理活动生命周期的加载程序或用于较高级别多线程控制的执行程序。