Android(Kotlin)

HttpURLConnection

E.I.T.U 2021. 7. 29. 20:11

1. 안드로이드에서 네트워크 관련 작업은 백그라운드 처리를 원칙으로 하기 때문에

build.gradledependencies 에 코루틴 의존성을 추가한다

implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9' 추가

2. manifest 파일에서 인터넷 접근 권한을 추가

3. 참고해볼 코드 - url을 입력하면 해당 웹페이지 코드를 출력하는 예시

CoroutineScope(Dispatchers.IO).launch {

   try//네트워크 관련 코드는 앱이 멈추는 치명적인 오류가 발생할 가능성이 높기 때문에 예외처리 꼭 하자

      val url = URL(urlText)  //입력받은 텍스트를 url로 캐스팅

      val urlConnection = url.openConnection() as HttpURLConnection  //url 객체로 서버와의 연결 생성 후 형변환

        //openConnection 메서드는 URLConnection이라는 추상 클래스를 반환하기 때문에

        //추상 클래스를 사용하기 위해 실제 구현 클래스로 형변환 필요

      urlConnection.requestMethod = "GET//요청 방식은 반드시 대문자, 없는 방식을 입력하면 오류 발생

 

      if(urlConnection.responseCode == HttpURLConnection.HTTP_OK) {  //응답이 정상일 경우 데이터 처리

         val streamReader = InputStreamReader(urlConnection.inputStream)  //입력 스트림 연결

         val buffered = BufferedReader(streamReader)  //버퍼에 담아 데이터를 읽을 준비

         

         val content = StringBuilder()

         while(true) {

            val line = buffered.readLine() ?: break  //버퍼에서 한줄씩 읽어옴, 읽어올 데이터가 없으면 break

            content.appent(line)  //읽어온 한줄을 저장

         }

 

         buffered.close()  //버퍼를 닫음

         urlConnection.disconnect()  //서버와의 연결 해제

 

         launch(Dispatchers.Main) {  //UI에 접근할 때에는 Main Dispatcher 에서 작업해야함

            binding.textContent.text = content.toString()

         }

      }

   } catch(e: Exception) {  //오류 발생 시 로그 출력

      e.printStackTrace()

   }

}