在调用服务时,出现了java.io.IOException的异常。

3

我正在从我的应用程序调用 Web 服务。我使用了 Service 而不是 ASyncTask 来调用 Web 服务。但我遇到了 java.io.IOException 的问题。我也尝试过使用 AsyncTask,但它可以正常运行。问题只出现在我使用 Service(后台线程)时。请帮助我解决这个问题。

日志记录如下:

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();
    }

}

感谢您的提前帮助。

1
请展示您的Logcat输出以及服务代码。 - SilentKiller
最好在AsyncTask中调用该Web服务。 - SilentKiller
没问题,使用AsyncTask工作得很好。唯一的缺点是无法进行UI交互。 - Snehal
您需要在UI上展示来自Web服务的数据吗? - SilentKiller
不,我只是发布数据,没有获取任何数据。 - Snehal
显示剩余5条评论
2个回答

1
基本上,服务是一个应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。而异步任务允许在不必操纵线程和/或处理程序的情况下,在UI线程上执行后台操作并发布结果。
在使用Web服务时,您必须以异步方式调用它,因为异步调用使Web服务客户端能够发起对Web服务的请求,继续处理而不阻塞,并在将来的某个时间接收响应。
所以,
根据您的应用程序要求,您必须使用服务调用Web服务。但是您所做的是,直接在服务中调用Web服务,而不是这样,只需将Web服务调用到asynctask中,并从服务调用asynctask即可。就这些。
请回复您的反馈。
祝编码愉快...

好的,我会尝试的 :) - Snehal
1
是的,现在它运行得非常好.. :) 我已经寻找这个问题很长时间了,但没有得到任何解决方案.. 你的建议完全解决了我的问题.. 非常感谢。 - Snehal

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接