You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android调用SOAP WebService无输出问题求助

解决Android SOAP WebService调用无输出的问题

我帮你排查了代码里的几个关键问题,这些应该就是导致调用没生效的核心原因:

1. 错误的WebService请求URL

你当前把URL设置成了带?WSDL的文档地址,但实际SOAP请求应该发送到asmx的基础服务地址,WSDL只是用来描述服务的文档,不是请求地址。修改如下:

String URL = "http://202.54.216.49/logs/test.asmx";

2. 参数添加方式错误

你现在用soapObject.addProperty("a",propertyInfo1)的写法,会把PropertyInfo对象本身当作参数值传递,而不是正确配置参数的元信息。应该直接传入PropertyInfo对象:

soapObject.addProperty(propertyInfo1);
soapObject.addProperty(propertyInfo2);

3. 参数类型不匹配

如果你的calculation服务方法是接收数字类型(比如整数),但你把参数类型设置成String.class,会导致服务端无法正确解析参数。建议修改参数类型为Integer.class,同时在传递前把输入的字符串转成整数:

@Override
protected String doInBackground(String... params) {
    String result = "";
    try {
        // 先把输入的字符串转成整数
        int param1 = Integer.parseInt(params[0]);
        int param2 = Integer.parseInt(params[1]);

        SoapObject soapObject = new SoapObject(NAMESPACE, METHOD_NAME);
        PropertyInfo propertyInfo1 = new PropertyInfo();
        propertyInfo1.setName(PARAMETER_NAME1);
        propertyInfo1.setValue(param1);
        propertyInfo1.setType(Integer.class);

        PropertyInfo propertyInfo2 = new PropertyInfo();
        propertyInfo2.setName(PARAMETER_NAME2);
        propertyInfo2.setValue(param2);
        propertyInfo2.setType(Integer.class);

        soapObject.addProperty(propertyInfo1);
        soapObject.addProperty(propertyInfo2);

        // 后续的envelope和请求代码不变
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(soapObject);
        HttpTransportSE httpTransportSE = new HttpTransportSE(URL);
        
        httpTransportSE.call(SOAP_ACTION, envelope);
        SoapPrimitive soapPrimitive = (SoapPrimitive)envelope.getResponse();
        result = soapPrimitive.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}

4. Android 9+明文HTTP访问限制

从Android 9(API 28)开始,系统默认禁止明文HTTP请求,你需要在AndroidManifest.xml的<application>标签里添加配置,允许明文访问:

<application
    ...
    android:usesCleartextTraffic="true">
    ...
</application>

5. 异常处理优化(方便调试)

当前的异常处理只是打印日志,你可以优化一下,在界面上显示错误信息,方便排查问题:

class CallWebService extends AsyncTask<String, Void, String> {
    private Exception requestException;

    @Override
    protected void onPostExecute(String s) {
        if (requestException != null) {
            ans.setText("调用失败:" + requestException.getMessage());
        } else {
            ans.setText(s);
        }
    }

    @Override
    protected String doInBackground(String... params) {
        String result = "";
        requestException = null;
        try {
            // 原有的请求代码
        } catch (Exception e) {
            requestException = e;
            e.printStackTrace();
        }
        return result;
    }
}

把这些修改完成后,再测试一下,应该就能正常获取WebService的返回结果了。

内容的提问来源于stack exchange,提问作者Abhimanyu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:23:10