首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ksop2 java.io.IOException:传输端点未连接

ksop2 java.io.IOException:传输端点未连接
EN

Stack Overflow用户
提问于 2012-12-30 13:12:50
回答 1查看 2.1K关注 0票数 1

你好斯塔克夫弗洛队,

我犯了个奇怪的错误。我使用ksop2对http://www.webserviceX.NET进行soap调用。当我使用带有Android2.3.3的avm或智能手机时,下面的代码工作得很好。当我在带有版本4的android智能手机上运行这段代码时,我会收到以下错误:

E/ActivityRecord(212):发生sendActivityPerformanceInfo异常: java.io.IOException:传输端点未连接

下面是代码:

代码语言:javascript
复制
  soapObject = new SoapObject(namespace, "GetCitiesByCountry");
  soapObject.addProperty("CountryName", countryIn); 
  envelope.setOutputSoapObject(soapObject);
  envelope.bodyOut = soapObject;
  envelope.dotNet = true;
  httpTransportSE = new HttpTransportSE("http://www.webservicex.net/globalweather.asmx");
  httpTransportSE.debug = true;
  Log.d(TAG, "********** http - Call ***********");
  httpTransportSE.call("http://www.webserviceX.NET/GetCitiesByCountry", envelope);

错误发生在httpTransportSE.call(..)也许你能帮我。

EN

回答 1

Stack Overflow用户

发布于 2012-12-31 01:41:08

假设您已经检查了所有这些步骤(由于某些原因,其中许多步骤没有返回corect异常名称)

  • 你有一个主动连接。
  • 你有互联网权限。
  • 2.x终端使用的代码与4.x终端使用的代码相同。
  • 您最近使用soapUI应用程序或其他终端测试了您的服务链接类型。
  • 您确信您的代码目前正在其他终端上正确运行。

我别无选择,只能得出结论,您正在尝试从主线程建立连接,从而生成自API 11 (3.0)以来添加的类型NetworkOnMainThreadException的异常。

解决这个问题的方法是,您必须从第二个线程运行您的调用,并以某种策略作为“观察者”获得结果。

这是一个示例代码,如果您想实现这个方法

SOAP连接器类

代码语言:javascript
复制
 public class SOAPConnector extends Observable  {

    private static boolean isRunAction=false;   

    private static String ACTION = "";  
    private static String METHOD_NAME = ""; 
    private static String NAMESPACE = "";
    private static String URL_hprotocol = "";
    private static String URL_host = "";
    private static String URL_service = ""; 
    private static String outData = ""; 
    private static String inData = "";

    private final static int HTTPS_PORT = 443;
    private final static int HTTPS_TIMEOUT = 5000;

    private static boolean isHttps=false;    

    public SOAPConnector(String action, 
                     String method, 
                     String namespace, 
                     String hprotocol, 
                     String host,
                     String service){
        if(!isRunAction){
            ACTION = action;  
                METHOD_NAME = method; 
                NAMESPACE = namespace;
                URL_hprotocol = hprotocol;
                URL_host = host;
            URL_service = service;
        }

     }

    public void sendSoapData(String data,boolean https){
        if(!isRunAction){           
            isHttps = https;        
            outData = data;        
            Thread threadsoap = new Thread(runSendSoap);
            threadsoap.start();
        }
    }


    private Runnable runSendSoap = new Runnable(){
         public void run(){
            launchSendSOAP();
            handlerSendSOAP.sendEmptyMessage(0);
         }
         private Handler handlerSendSOAP = new Handler() {              
             public void handleMessage(Message msg) {}
        };         

    };

    private void launchSendSOAP(){
           isRunAction=true;
           try {
                SoapObject client = new SoapObject(NAMESPACE,METHOD_NAME);              
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
                String tmpDate = sdf.format(new Date(System.currentTimeMillis()));                              
                String tmpData = outData;                                               
                client.addProperty("dataFIELD",(String)tmpData);                
                client.addProperty("dateFIELD",(String)tmpDate);
                client.addProperty("codeFIELD","NULL");             
                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER12);
                envelope.dotNet=false;
                envelope.setOutputSoapObject(client);               
               if(isHttps){
                  HttpsTransportSE androidHttpsTransport = new HttpsTransportSE(URL_host, HTTPS_PORT, URL_service,HTTPS_TIMEOUT);
                  androidHttpsTransport.call(ACTION,envelope);
               }else{
                  HttpTransportSE androidHttpTransport = new HttpTransportSE(URL_hprotocol+URL_host+URL_service);
                  androidHttpTransport.call(ACTION,envelope);
               }                 
               Object result = envelope.getResponse();
               inData=result.toString();
            } catch (Exception e) {
               inData="ERROR";
            }         
           isRunAction=false;
           setChanged();
           notifyObservers(inData);

   }
}

活动调用

代码语言:javascript
复制
private SOAPConnector soapConnector = null;
private ConnectorObserver conObserver =null;
private boolean isActionSoap=false;

private void setServiceObserver(){
    soapConnector =  new SOAPConnector(SOAP_ACTION_dummy,
                                       METHOD_NAME_dummy,
                                       NAMESPACE_dummy,
                                       URL_hprotocol,
                                       URL_host,
                                       URL_service);        
}   

private void soapSendProcess(){
    if(!isActionSoap){
        isActionSoap=true;          
        if(soapConnector==null){
            setServiceObserver();
        }
        conObserver = new ConnectorObserver();
        soapConnector.deleteObservers();                    
        soapConnector.addObserver((Observer)conObserver);
        soapConnector.sendSoapData("TEST",false);
    }


public class ConnectorObserver implements Observer{
    @Override
    public void update(Observable observable, Object data){
        String resultData = (String)data;
        if(resultData.equals("ERROR")){
             //TODO fail action
        }else{      
             //TODO parsing action
        }
        soapConnector.deleteObservers();
        isActionSoap=false;

    }
}

这段代码已经用2.2 ~ 4.03终端进行了测试 使用ksoap2-android-assembly-3.0.0-jar-RC.4-with-dependencies.jar库..

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14090997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档