Android问题中的Ksoap2

时间:2014-06-14 13:29:26

标签: android android-ksoap2

我正在尝试使用我在本地主机中使用的Web服务:

<?xml version="1.0" encoding="UTF-8"?>

<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09  (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. -->

<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is Metro/2.1.1-b09 (branches/2.1-6834; 2011-07-16T17:14:48+0000) JAXWS-RI/2.2.5-promoted-b04 JAXWS/2.2. -->

-<definitions name="WsParkinsonControl" targetNamespace="http://parkinsoncontrol.com/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://parkinsoncontrol.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
-<types>
-<xsd:schema>
<xsd:import schemaLocation="http://localhost:8080/WsParkinsonControl/WsParkinsonControl?xsd=1" namespace="http://parkinsoncontrol.com/"/>
</xsd:schema>
-<xsd:schema>
 <xsd:import schemaLocation="http://localhost:8080/WsParkinsonControl/WsParkinsonControl?xsd=2" namespace="com.parkinsoncontrol.bean"/>
 </xsd:schema>
 </types>
.............
 -<message name="logon">
 <part name="parameters" element="tns:logon"/>
 </message>

 -<message name="logonResponse">

  <part name="parameters" element="tns:logonResponse"/>

  </message>
 -<portType name="WsParkinsonControl">
 -<operation name="logon">

  <input message="tns:logon" wsam:Action="http://parkinsoncontrol.com/WsParkinsonControl/logonRequest"/>

  <output message="tns:logonResponse" wsam:Action="http://parkinsoncontrol.com/WsParkinsonControl/logonResponse"/>

  </operation>
  -<operation name="logon">

   <soap:operation soapAction=""/>

   -<input>

    <soap:body use="literal"/>

   </input>
  -<output>
  <soap:body use="literal"/>

  </output>

  </operation>

</binding>


-<service name="WsParkinsonControl">


-<port name="WsParkinsonControlPort" binding="tns:WsParkinsonControlPortBinding">

 <soap:address location="http://localhost:8080/WsParkinsonControl/WsParkinsonControl"/>

 </port>

 </service>

从这个wsdl文件中我试图从我正在开发的Android应用程序中使用它,当我尝试使用它时,我有下一个错误:

  06-08 22:20:21.376: E/AndroidRuntime(2703): FATAL EXCEPTION: main
  06-08 22:20:21.376: E/AndroidRuntime(2703): android.os.NetworkOnMainThreadException
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at    android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at java.net.InetAddress.getAllByName(InetAddress.java:214)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:316)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpEngine.connect(HttpEngine.java:311)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:81)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:197)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:126)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:185)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:118)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:113)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at com.example.parkinsoncontrol.MainActivity.onClick(MainActivity.java:105)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at android.view.View.performClick(View.java:4204)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at android.view.View$PerformClick.run(View.java:17355)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at android.os.Handler.handleCallback(Handler.java:725)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at android.os.Handler.dispatchMessage(Handler.java:92)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at android.os.Looper.loop(Looper.java:137)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at android.app.ActivityThread.main(ActivityThread.java:5041)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at java.lang.reflect.Method.invokeNative(Native Method)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at java.lang.reflect.Method.invoke(Method.java:511)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
  06-08 22:20:21.376: E/AndroidRuntime(2703):   at dalvik.system.NativeStart.main(Native Method)

我可以看到错误出现在MainActivity文件的第105行,这是下一段代码:

 ........................
  private static final String SOAP_ACTION="http://parkinsoncontrol.com/logon";
  private static final String METHOD_NAME="logon";
  private static final String NAMESPACE="http://parkinsoncontrol.com/";
  private static final String URL="http://localhost:8080/WsParkinsonControl/WsParkinsonControl?wsdl";

  public void onClick(View v) {
    // TODO Auto-generated method stub
    SoapObject request=new SoapObject(NAMESPACE, METHOD_NAME);

    PropertyInfo logon= new PropertyInfo();
    logon.setName("login");
    logon.setValue(txtUserName.getText().toString());
    logon.setType(String.class);
    request.addProperty(logon);
    PropertyInfo logon2= new PropertyInfo();
    logon2.setName("password");
    logon2.setValue(txtPassword.getText().toString());
    logon2.setType(String.class);
    request.addProperty(logon2);

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
     SoapObject result;
     envelope.dotNet=false;
     envelope.bodyOut=request;
     envelope.setOutputSoapObject(request);

     HttpTransportSE httpTransport = new HttpTransportSE(URL);


     try {
         httpTransport.debug=true;
        httpTransport.call(SOAP_ACTION, envelope);
        result= (SoapObject)envelope.bodyIn;
    } catch (HttpResponseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (XmlPullParserException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    Intent i = new Intent(this,MenuActivity.class);
    startActivity(i);

}

 ..........................

有问题的一行是:httpTransport.call(SOAP_ACTION,envelope);而且我不知道为什么。你能帮助我吗,因为我不知道我做错了什么,拜托?。

提前谢谢

1 个答案:

答案 0 :(得分:0)

您正在主线程中执行请求。例如,将它移动到像asyntask这样的后台线程。