ssummeraw 2013-08-07 08:11 采纳率: 10%
浏览 3817

使用AsyncTask调用web服务器

如果代码正在执行,连接突然中断,错误就会发生 ,错误好像就发生在line 430,

androidHttpTransport.call(soap_action, envelope); 

下面的代码是关于 AsyncTask的:

 private class CheckUpdateTask extends AsyncTask<Void, Void, ArrayList<String>>{
            private SoapObject response = null;
            ArrayList<String> methodsResult = new ArrayList<String>();      
    @Override
        protected ArrayList<String> doInBackground(Void... params) {
            // TODO Auto-generated method stub
                SoapObject Request = new SoapObject(NAMESPACE,"CheckUpdate");
                Request.addProperty("Username", username);
                Request.addProperty("Password", password);

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.dotNet = true;
            envelope.setOutputSoapObject(Request);
            final String soap_action = NAMESPACE+"CheckUpdate";

            HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
            try {
                androidHttpTransport.call(soap_action, envelope); //line 430, where error occurs!

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

            try {
                response = (SoapObject)envelope.getResponse();
                ...here I use the returned data for build my array (methodsResult)

            SoapObject pi = (SoapObject)response.getProperty(0);
            } catch (SoapFault e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return methodsResult; 
    }

    @Override
    protected void onPostExecute(ArrayList<String> result) {
        // TODO Auto-generated method stub
        String[] resultArr= result.toArray(new String[result.size()]);
        new callWS().execute(resultArr);

        super.onPostExecute(result);
    }
  }

错误信息:

08-07 12:58:47.920: E/AndroidRuntime(31053): FATAL EXCEPTION: AsyncTask #5
08-07 12:58:47.920: E/AndroidRuntime(31053): java.lang.RuntimeException: An error occured while executing doInBackground()
08-07 12:58:47.920: E/AndroidRuntime(31053):    at android.os.AsyncTask$3.done(AsyncTask.java:278)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.lang.Thread.run(Thread.java:856)
08-07 12:58:47.920: E/AndroidRuntime(31053): Caused by: java.lang.NullPointerException
08-07 12:58:47.920: E/AndroidRuntime(31053):    at org.ksoap2.transport.ServiceConnectionSE.getResponseProperties(ServiceConnectionSE.java:85)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:167)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:96)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at host.framework.ServicePromemoria$CheckUpdateTask.doInBackground(ServicePromemoria.java:430)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at host.framework.ServicePromemoria$CheckUpdateTask.doInBackground(ServicePromemoria.java:1)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at android.os.AsyncTask$2.call(AsyncTask.java:264)
08-07 12:58:47.920: E/AndroidRuntime(31053):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-07 12:58:47.920: E/AndroidRuntime(31053):    ... 5 more

我不确定这个问题是否与断开连接有关。

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-01-11 15:18
    关注

    这段代码是使用 AsyncTask 向 web 服务器发送 SOAP 请求,并在请求返回后将结果解析为 ArrayList。如果请求过程中出现 IOException 或 XmlPullParserException 异常,则会打印错误信息并停止执行。


    但是在 onPostExecute 的地方,没有考虑到请求可能出错的情况,因此如果请求失败会抛出异常,这也是错误产生的原因


    可以在 onPostExecute 方法中加入一些错误处理代码,如判断 result 是否为空,或在 doInBackground 方法中在出现异常后返回一个特殊值(例如 null),在 onPostExecute 中进行判断。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题