java.io.IOException从Service调用webService时

时间:2014-04-02 07:00:32

标签: android web-services service

我正从我的应用程序调用Web服务。我使用Service而不是ASyncTask来调用Web服务。我得到了java.io.IOException。我已经使用AsyncTask进行了测试,但其工作正常。只有当我使用Service(后台线程)时才会出现问题。请帮我解决这个问题。

Logcat是

04-02 17:01:30.103: W/System.err(17131): java.io.IOException
04-02 17:01:30.104: W/System.err(17131):    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:87)
04-02 17:01:30.105: W/System.err(17131):    at libcore.net.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:205)
04-02 17:01:30.105: W/System.err(17131):    at org.ksoap2.transport.ServiceConnectionSE.openOutputStream(ServiceConnectionSE.java:109)
04-02 17:01:30.106: W/System.err(17131):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:157)
04-02 17:01:30.107: W/System.err(17131):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)
04-02 17:01:30.108: W/System.err(17131):    at com.example.rajneta.Syncdetails.send_voter_record(Syncdetails.java:204)
04-02 17:01:30.108: W/System.err(17131):    at com.example.rajneta.Syncdetails.onStartCommand(Syncdetails.java:62)
04-02 17:01:30.109: W/System.err(17131):    at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2638)
04-02 17:01:30.110: W/System.err(17131):    at android.app.ActivityThread.access$1900(ActivityThread.java:149)
04-02 17:01:30.111: W/System.err(17131):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1397)
04-02 17:01:30.112: W/System.err(17131):    at android.os.Handler.dispatchMessage(Handler.java:99)
04-02 17:01:30.113: W/System.err(17131):    at android.os.Looper.loop(Looper.java:153)
04-02 17:01:30.114: W/System.err(17131):    at android.app.ActivityThread.main(ActivityThread.java:4987)
04-02 17:01:30.115: W/System.err(17131):    at java.lang.reflect.Method.invokeNative(Native Method)
04-02 17:01:30.116: W/System.err(17131):    at java.lang.reflect.Method.invoke(Method.java:511)
04-02 17:01:30.117: W/System.err(17131):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
04-02 17:01:30.118: W/System.err(17131):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
04-02 17:01:30.119: W/System.err(17131):    at dalvik.system.NativeStart.main(Native Method)

代码:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    send_voter_record();
    return Service.START_NOT_STICKY;
}

public void send_voter_record() {
    SoapObject request = null;
    try {
        String query;
        request = new SoapObject(NAMESPACE, METHOD_NAME);
        request.addProperty("data", query);
    } catch (Exception e) {
        e.printStackTrace();
    }
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    System.out.println("###########request" + request);
    envelope.setOutputSoapObject(request);
    envelope.dotNet = true;
    envelope.encodingStyle = SoapEnvelope.XSD;
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    androidHttpTransport.debug = true;
    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);
        Object root = envelope.getResponse();
    } catch (Exception e) {
        e.printStackTrace();
    }

}

提前致谢

2 个答案:

答案 0 :(得分:1)

基本上服务是一个应用程序组件,可以在后台执行长时间运行的操作,但不提供用户界面。 AsyncTask 允许在UI线程上执行后台操作和发布结果,而无需操作线程和/或处理程序。

使用Web服务时,您必须将其称为异步,因为异步调用使Web服务客户端能够发起对Web服务的请求,继续处理而不会阻塞,并在某些情况下接收响应指出未来。

所以,

根据您的应用程序要求,您必须使用服务调用Web服务。但你所做的是,你直接在服务中调用你的网络服务,而不是那样,只需将你的网络服务调用为asynctask并从服务中调用异步任务。多数民众赞成。

回复您的反馈意见。

快乐编码......

答案 1 :(得分:0)

请提供您的代码。 您只需启动后台服务,并在onStart服务方法中调用该方法来调用Web服务并在后台进程完成后停止服务。