本人在做Android项目时,遇到如下问题:httpResponse = client.execute(request, context); 在该句代码执行时总是报 IOException,并不是左右的网站请求都报这个错误,我已在AndroidMainfest.xml中添加如下代码:<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />请教高人,这是什么原因呢?

解决方案 »

  1.   

    把logcat里IOException的详细信息都贴出来
      

  2.   

      private String doRequest(HttpRequestBase request) throws ConnectionException, FailException  {
        String result = null;
        HttpResponse httpResponse = null;
        if (null == client)
          client = (DefaultHttpClient) getHttpsClient();
        try {
          HttpContext context = null;
          if (null != ClearvaleClient.cookieStore) {
            context = new BasicHttpContext();
            context.setAttribute(ClientContext.COOKIE_STORE,
                ClearvaleClient.cookieStore);
          }      httpResponse = client.execute(request, context);
          int status = httpResponse.getStatusLine().getStatusCode();
          if (status == HttpStatus.SC_OK) {
            result = EntityUtils.toString(httpResponse.getEntity());
          } else {
            throw new FailException(status);
          }
        }
        catch (HttpHostConnectException hce) {
    System.out.println("HttpHostConnectException");
          throw new ConnectionException(hce);
        }
        catch (ClientProtocolException e1) {
    System.out.println("ClientProtocolException");
          throw new ConnectionException(e1);
        }
        catch (IOException e1) {
    System.out.println("IOException");
          throw new ConnectionException(e1);
        }
        return result;
      }以上是发送请求的详细代码,其中参数是这样传递的: HttpGet httpRequest = new HttpGet(finalURL); finalURL 为一个url请求地址,比如: finalURL: https://muran.cvtest.com/pg/cvapi/rest/json?auth_token=dec66c321786a26bb4567627d879e95e&limit=20&lang=zh
      

  3.   

    其实你这个IOException有可能是SocketTimeoutException
    你在catch IOException之前,
    catch(SocketTimeoutException e){
    System.out.println("SocketTimeoutException");       
            throw new ConnectionException(hce); 
    }
    试试
      

  4.   

    @cclovescw: 不好意思,昨天有个别的项目比较急!我今天试了一下,没有catch到SocketTimeoutException呢!还是报IOException呢catch (HttpHostConnectException hce) {
    System.out.println("HttpHostConnectException");
          throw new ConnectionException(hce);
        }
        catch (ClientProtocolException e1) {
    System.out.println("ClientProtocolException");
          throw new ConnectionException(e1);
        }
        catch(SocketTimeoutException e){
    System.out.println("SocketTimeoutException");       
          throw new ConnectionException(e);   
        }
        catch (IOException e1) {
    System.out.println("IOException");
          throw new ConnectionException(e1);
        }
      

  5.   

    关键你要看看logcat里的日志,把exception打出来
      

  6.   

    catch (IOException e1) {
    System.out.println("IOException");
    //      throw new ConnectionException(e1);
          e1.printStackTrace();
        }打印IOException信息,如下:06-04 14:34:00.827: W/System.err(7036): java.net.UnknownHostException: muraneco.cvtest.com
    06-04 14:34:00.827: W/System.err(7036):  at java.net.InetAddress.lookupHostByName(InetAddress.java:513)
    06-04 14:34:00.834: W/System.err(7036):  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:278)
    06-04 14:34:00.834: W/System.err(7036):  at java.net.InetAddress.getAllByName(InetAddress.java:242)
    06-04 14:34:00.834: W/System.err(7036):  at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:140)
    06-04 14:34:00.834: W/System.err(7036):  at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    06-04 14:34:00.834: W/System.err(7036):  at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    06-04 14:34:00.842: W/System.err(7036):  at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:352)
    06-04 14:34:00.842: W/System.err(7036):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
    06-04 14:34:00.850: W/System.err(7036):  at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
    06-04 14:34:00.850: W/System.err(7036):  at com.broadvision.clearvale.http.client.ClearvaleClient.doRequest(ClearvaleClient.java:225)
    06-04 14:34:00.850: W/System.err(7036):  at com.broadvision.clearvale.http.client.ClearvaleClient.doGet(ClearvaleClient.java:186)
    06-04 14:34:00.858: W/System.err(7036):  at com.broadvision.clearvale.service.CommunityDAO.getCommunitiesForUser(CommunityDAO.java:94)
    06-04 14:34:00.858: W/System.err(7036):  at com.broadvision.clearvale.activities.communities.CommunitiesListActivity.getCommunities(CommunitiesListActivity.java:139)
    06-04 14:34:00.858: W/System.err(7036):  at com.broadvision.clearvale.activities.communities.CommunitiesListActivity.access$12(CommunitiesListActivity.java:138)
    06-04 14:34:00.858: W/System.err(7036):  at com.broadvision.clearvale.activities.communities.CommunitiesListActivity$2.run(CommunitiesListActivity.java:110)这是打印出来的log信息,奇怪的是,我访问的是 muraneco01.cvtest.com, 现在却报: java.net.UnknownHostException: muraneco.cvtest.com,请求指向:muraneco.cvtest.com神马原因呢?!
      

  7.   

    神人啊,,你加个访问网络的权限先,,,android。xxx,Intenet,,,然后这个放在Thread就不会了,,神人
      

  8.   

    Android_app: 访问网络的权限已经加上了,开始帖子中就提到了。
      

  9.   

        <uses-permission android:name="android.permission.INTERNET"/>
      

  10.   

    1   <uses-permission android:name="android.permission.INTERNET"/>
    2  如果在主线中 需要StrictMode.enableDefaults();
    或者把你的代码移动其它非主线程中去