마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

https 통신 관련 질문입니다.

0 추천
public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        StringBuilder content = new StringBuilder();
        
        try
        {
            String data = "userid=???&password=???";
            URL url = new URL("https://www.google.com");
            
            HttpURLConnection http = null;
            
            if (url.getProtocol().toLowerCase().equals("https")) {
                trustAllHosts();
                HttpsURLConnection https = (HttpsURLConnection) url.openConnection();
                https.setHostnameVerifier(DO_NOT_VERIFY);
                http = https;
            } else {
                http = (HttpURLConnection) url.openConnection();
            }
            Log.d("fd","sd");
            http.setDoOutput(true);
           /* OutputStreamWriter wr = new OutputStreamWriter(http.getOutputStream());
            wr.write(data);
            wr.flush();*/
            Log.d("fd","sd2");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(http.getInputStream()));
            Log.d("fd","sd");
            String line;
           
            while ((line = bufferedReader.readLine()) != null)
            {
              content.append(line + "\n");
            }
            Log.i("content", content.toString());
           // wr.close();
            bufferedReader.close();
        }
        catch(Exception e)
        {
        }
    }
    
    private static void trustAllHosts() {
        // Create a trust manager that does not validate certificate chains
        TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return new java.security.cert.X509Certificate[] {};
                }
 
                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType)
                        throws java.security.cert.CertificateException {
                    // TODO Auto-generated method stub
                    
                }
 
                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] chain,
                        String authType)
                        throws java.security.cert.CertificateException {
                    // TODO Auto-generated method stub
                    
                }
        } };
 
        // Install the all-trusting trust manager
        try {
                SSLContext sc = SSLContext.getInstance("TLS");
                sc.init(null, trustAllCerts, new java.security.SecureRandom());
                HttpsURLConnection
                                .setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
                e.printStackTrace();
        }
    }
    
    final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };
}
아직 통신과 안드로이드 자체에 많이 미약한 사람이라.... 제가 직접 작성한 코드가 아닌 예제 소스를 보며 이해를 하고 있습니다. 그런데 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(http.getInputStream()));
이 부분에서 다음으로 진행이 안되는지.. 코드 실행이 안되더군요... ㅠㅠ 이 문제 해결 방법좀 알려 주시면 감사하겠습니다.ㅠ
crash518 (120 포인트) 님이 2014년 6월 13일 질문

1개의 답변

0 추천
스레드 돌려야 합니다. 네트워크 작업은 무조건 AsyncTask 혹은 Thread로 돌려야합니다.
YeonMin (17,860 포인트) 님이 2014년 6월 13일 답변
...