public static InputStream GetInputStream(String _url){
InputStream rs = null;
try {
URL url = new URL("_url);
HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
httpConnection.setConnectTimeout(3000);
httpConnection.setReadTimeout(5000);
int responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
rs = httpConnection.getInputStream();
} else {
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
}
return rs;
}
xml 파싱을 위해 위와 같이 스트림을 얻을 려고 하는데요
매번은 아니지만 디바이스를 장시간 방치한 후 시도 하거나 네트웍이 약하거나, 네트웍이 강하더라고 가변적으로
소켓 타임아웃이 일어나서 불안한 상태입니다..
아래는 LogCat의 내용입니다.
11-02 13:06:21.460: WARN/System.err(8152): java.net.SocketTimeoutException
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:451)
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:75)
11-02 13:06:21.460: WARN/System.err(8152): at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:168)
11-02 13:06:21.460: WARN/System.err(8152): at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readLine(HttpURLConnectionImpl.java:671)
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.readResponseHeaders(HttpURLConnectionImpl.java:699)
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getFromNetwork(HttpURLConnectionImpl.java:1088)
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1041)
11-02 13:06:21.460: WARN/System.err(8152): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:736)
위의 소스에서 소켓타임아웃 익셉션을 피하기 위해서 수정해야 할 부분이나 추가 해야할 부분이 있으면 조언 부탁드립니다..
참고로 위의 소스는 반환되는 rs가 null이면 3번을 더 시도 하도록 구현되어 있습니다..




네트워크 불안정한 상황을 앱에서는 제어를 할수 있을까요...
저는 개발하면서 이러한 예외가 발생하면 경고창 띄어주고 끝내버립니다...
만약 이러한 처리를 하지 않았다면....정말 네트워크가 약해서 안터지는 곳에서 자꾸만 시도하게 되는 상황이..
적당한 예외상황에서 사용자가 앱을 재 실행할 수 있도록 유도하거나 네트워크 상태에 관해 알려주는 방법이 옳지 않을까요...
질문에 대한 답변은 아니지만..그냥 개인적인 생각입니다..-_-;