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

Android调用WebService遇java.net.SocketTimeoutException问题求助

解决Android调用WebService时的SocketTimeoutException问题

以下是针对你遇到的超时问题的具体排查和解决步骤:


1. 修复本地地址访问问题

你代码中使用的http://localhost:8090/WebService1.asmx在Android设备/模拟器中无法正确指向你的开发电脑:

  • 若使用Android模拟器,替换地址为http://10.0.2.2:8090/WebService1.asmx(这是模拟器映射主机localhost的专用地址)
  • 若使用真机测试,替换为你开发电脑的局域网IP(例如http://192.168.1.100:8090/WebService1.asmx),同时确保手机与电脑在同一局域网,且电脑防火墙允许8090端口的入站请求。

2. 增加超时时间

默认HttpTransportSE的超时时间较短,容易导致请求未完成就触发超时。创建实例时显式设置更长的超时(单位:毫秒):

httpTransportSE = new HttpTransportSE(URL, 15000); // 设置15秒超时

3. 补充必要的网络配置

  • 在AndroidManifest.xml中添加网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    
  • 若你的设备是Android 9及以上版本,默认禁止明文HTTP请求,需要在<application>标签中添加允许配置:
    android:usesCleartextTraffic="true"
    

4. 验证WebService可用性

先通过浏览器或Postman访问http://localhost:8090/WebService1.asmx,确认WebService服务正常运行、能响应请求,排除服务本身的问题。


修改后的示例代码

package com.example.acr_soaptest2;
import android.util.Log;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class ServiceManager {
    private static final String METHOD_NAME = "MySQl_Query";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String SOAP_ACTION = "http://tempuri.org/MySQl_Query";
    // 替换为适配设备的正确地址
    private static final String URL = "http://10.0.2.2:8090/WebService1.asmx";

    SoapObject soapObject;
    SoapSerializationEnvelope soapSerializationEnvelope;
    HttpTransportSE httpTransportSE;

    public void PushData(String query) {
        soapObject = new SoapObject(NAMESPACE, METHOD_NAME);
        soapObject.addProperty("sorgu", query);
        soapSerializationEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
        soapSerializationEnvelope.dotNet = true;
        soapSerializationEnvelope.setOutputSoapObject(soapObject);

        // 设置15秒超时
        httpTransportSE = new HttpTransportSE(URL, 15000);
        httpTransportSE.debug = true;
        try {
            httpTransportSE.call(SOAP_ACTION, soapSerializationEnvelope);
            SoapPrimitive soapPrimitive=(SoapPrimitive)soapSerializationEnvelope.getResponse();
            System.out.println(soapPrimitive.toString());
            Log.d("satir:", soapPrimitive.toString());
        } catch (Exception ex) {
            ex.printStackTrace();
            Log.d("satir:", ex.toString());
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:45:46