日期:2014-05-20  浏览次数:20766 次

[讨论]s60机上 http的连接问题,看到有很多人遇到,大家来讨论下!
最近在做   :用HttpConnection连接,tomcat上的http连接。
HttpConnection   conn   =   (HttpConnection)   Connector.open(siteInfo.getURL(),Connector.READ_WRITE,   true);   这里没有报错和异常.
但是:code   =   conn.getResponseCode();
这句好像会阻塞其他的线程,当执行这一行代码时候,paint(渲染线程会很慢!很久才回重画一次);
过了很久以后会报IOException
在s40真机上和任何模拟器上不会产生这个问题,在s60的第二版上都一这个问题,s60的第三版还每测试。


  以下的代码是在单独的线中运行:

  HttpConnection   conn   =   null;
    try   {
      conn   =   (HttpConnection)   Connector.open(siteInfo.getURL()Connector.READ_WRITE,   true);
    }   catch   (IllegalArgumentException   iaex)   {
      System.out.println( "非法URL: "   +   siteInfo.getURL());
    }   catch   (ConnectionNotFoundException   cnex)   {
      System.out.println( "不能够找到连接: "   +   siteInfo.getURL());
    }   catch   (IOException   ex)   {
      ex.printStackTrace();
    }   catch   (SecurityException   secEx)   {
      System.out.println( "安全限制,不能够访问网络: "   +   siteInfo.getURL());
    }

    try   {
      //   打开一个http连接
      if   (conn   !=   null)   {
        code   =   conn.getResponseCode();//   得到响应码!这里可能会阻塞:
      }
    }catch   (IOException   ioe)   {
      ioe.printStackTrace();
    }

  遇到这样问题来讨论下:不知道大家一什么解决办法没有?


------解决方案--------------------
S60第二版试试使用代理服务器连接http吧。
另外的确有网络堵塞的情况出现,比如connector.open()或者conn.getInputStream()获取下行数据时,代码不继续向后执行,而死在这个方法上,跟是否使用进度条或者程序UI没有任何关系。个人认为是手机http连接栈堵塞造成的,尤其在QD特别严重。这种情况下几乎程序无能为力,就算如楼上判断超时提示用户,什么把conn.close()以及把conn=null这些措施都是没有效果的,当程序再次进行http连接时,问题依然如故。所以这不是软件的问题,而是系统的问题。
在moto v3上也会出现。
个人经验教训,网络连接不能太过频繁。

saltedfish