1. 안드로이드에서 네트워크 관련 작업은 백그라운드 처리를 원칙으로 하기 때문에
build.gradle 의 dependencies 에 코루틴 의존성을 추가한다
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()
}
}
'Android(Kotlin)' 카테고리의 다른 글
안드로이드 레트로핏(Retrofit) (2) (0) | 2021.09.17 |
---|---|
안드로이드 레트로핏(Retrofit) (1) (0) | 2021.07.29 |
안드로이드 액티비티와 프래그먼트 생명주기 (0) | 2021.07.23 |
Firebase를 이용한 클라우드 메시징 (0) | 2021.06.18 |
ViewPager2의 프래그먼트에 접근하는 방법 (2) | 2021.06.16 |