2013-08-12 2 views
2

이 예외가 발생하는 응용 프로그램에 네트워크 프로세스가 있으며이 문제를 해결할 수 없습니다. 이미 글로벌 IP 주소에HttpHostConnectException 연결이 거부되었습니다. ConnectException ErrnoException

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

와 URI 내가 사용하고 우리의 서버에서 : 난 이미 내 전체 응용 프로그램에 적용 권한을 내 매니페스트에 특정 권한을 적용하고, 여기에있다. 브라우저에서는 잘 작동하지만 앱에서는 예외가 발생합니다. 다음은 스택 추적입니다.

 08-12 06:15:36.234: W/System.err(862): org.apache.http.conn.HttpHostConnectException: Connection to http://xxx.xx.xxx.xxx:8080 refused 
    08-12 06:15:36.324: W/System.err(862): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:183) 
    08-12 06:15:36.494: W/System.err(862): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
    08-12 06:15:36.594: W/System.err(862): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
    08-12 06:15:36.785: W/System.err(862): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
    08-12 06:15:36.904: W/System.err(862): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
    08-12 06:15:37.014: W/System.err(862): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
    08-12 06:15:37.164: W/System.err(862): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
    08-12 06:15:37.194: W/System.err(862): at com.android.app.util.Utility.getRequest(Utility.java:42) 
    08-12 06:15:37.284: W/System.err(862): at com.android.app.LoginActivity$LoginTask.doInBackground(LoginActivity.java:440) 
    08-12 06:15:37.404: W/System.err(862): at com.android.app.LoginActivity$LoginTask.doInBackground(LoginActivity.java:1) 
    08-12 06:15:37.534: W/System.err(862): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
    08-12 06:15:37.744: W/System.err(862): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
    08-12 06:15:37.804: W/System.err(862): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
    08-12 06:15:37.944: W/System.err(862): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
    08-12 06:15:38.044: W/System.err(862): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
    08-12 06:15:38.164: W/System.err(862): at java.lang.Thread.run(Thread.java:856) 
    08-12 06:15:38.364: W/System.err(862): Caused by: java.net.ConnectException: failed to connect to /xxx.xx.xxx.xxx (port 8080): connect failed: ETIMEDOUT (Connection timed out) 
    08-12 06:15:38.394: W/System.err(862): at libcore.io.IoBridge.connect(IoBridge.java:114) 
    08-12 06:15:38.664: W/System.err(862): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
    08-12 06:15:38.845: W/System.err(862): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
    08-12 06:15:38.894: W/System.err(862): at java.net.Socket.connect(Socket.java:842) 
    08-12 06:15:39.085: W/System.err(862): at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
    08-12 06:15:39.154: W/System.err(862): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
    08-12 06:15:39.184: W/System.err(862): ... 15 more 
    08-12 06:15:39.244: W/System.err(862): Caused by: libcore.io.ErrnoException: connect failed: ETIMEDOUT (Connection timed out) 
    08-12 06:15:39.464: W/System.err(862): at libcore.io.Posix.connect(Native Method) 
    08-12 06:15:39.774: W/System.err(862): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) 
    08-12 06:15:39.804: W/System.err(862): at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
    08-12 06:15:39.894: W/System.err(862): at libcore.io.IoBridge.connect(IoBridge.java:112) 
    08-12 06:15:39.984: W/System.err(862): ... 20 more 

아무 도움이됩니다. 고맙습니다.

편집 : 좋아, 여기 내 유틸리티입니다 :

public static String getRequest(String path){ 
    String url = http://xxx.xx.xxx.xxx:8080/SampleApi/sample-apis; // Global URL of the API 
    String username = "sampleuname"; 
    String password = "samplepass"; 

    CredentialsProvider credProvider = new BasicCredentialsProvider(); 
    credProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT), 
      new UsernamePasswordCredentials(username, password)); 

    try{ 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     httpClient.setCredentialsProvider(credProvider); 
     HttpGet httpGet = new HttpGet(url + path); 
     HttpResponse httpResponse = httpClient.execute(httpGet); // Okay, so the stack trace is pointing in this line 

     HttpEntity httpEntity = httpResponse.getEntity(); 
     if(httpEntity != null){ 
      inStream = httpEntity.getContent(); 
      String jsonString = convertStreamToString(inStream); 
      return jsonString; 
     } 
    } catch (UnsupportedEncodingException e) { 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return "Request NULL"; 
} 

내 전화 AsyncTask를 :

public class LoginTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... path) { 
     Log.d(Constant.TAG_LOGIN, path[0]); 

     String apiRequestReturn = Utility.getRequest(path[0]); // So here's the other line pointed by the stack trace where I called Utility 
     if (apiRequestReturn.equals("")) { 
      Log.d(Constant.TAG_LOGIN, "WebService request is null"); 
      return null; 
     } else { 
      Log.d(Constant.TAG_LOGIN, "WebService request has data"); 
      return apiRequestReturn; 
     } 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(null); 

     //JSON PARSING 
    } 
} 
+1

DefaultClientConnectionOperator.java:183 :이 코드를 게시 할 수 있습니까? & AbstractHttpClient.java – KOTIOS

+0

동일한 요청이 브라우저에서 작동합니까? –

+0

@ Stacks28'DefaultClientConnectionOperator.java'는 apache :'org.apache.http.impl.conn.DefaultClientConnectionOperator'에 속합니다. @StefandeBruijn 예, 브라우저에서 작동합니다. –

답변

5

내 장치와 같은 문제에 직면 LSO. 브라우저에서 json 응답이 잘 작동하는 URI가 있지만 장치에서 예외가 발생합니다. 나는 단순히 내 장치를 재부팅 한 다음 모바일 측에서 작동하고 있습니다. 장치를 다시 시작하십시오.

+0

와우. 그것은 일했다! – Chicowitz

0

다음 해결 방법을 따라 가면 문제를 해결할 수 있습니다.

1> 매니페스트 파일의 인터넷 사용 권한을 확인하십시오.

2> 클라이언트와 함께 브라우저로 URL을 확인하고 적절한 요청을 전달하십시오.

3> 같은 모바일에서 URL을 엽니 다 - 단지 확인을 위해 그것을이다http://your IP 주소/포트를 모바일에이 URL을 열 수있는 허가 또는하지를 않습니다.